본문 바로가기
알고리즘(Java)/String

[알고리즘]String(문자열) 10. 가장 짧은 문자 거리 - 한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 구하기

by snowballchoi 2021. 7. 18.
10. 가장 짧은 문자 거리
한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램
입력) 첫 번째 줄에 문자열 s와 문자 t가 주어집니다. 
출력) 첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력합니다.

 

Math.min() 사용

import java.util.Scanner;

public class Main {
	
	public static int[] solution(String str, char c) {
		int[] answer = new int[str.length()]; // 배열 동적 할당
		int p = 1000;
		
		// 왼쪽부터
		for (int i=0; i<str.length(); i++) {
			if (str.charAt(i)==c) { // 같은 문자 만나면
				p = 0;
				answer[i] = p;
			} else {
				p++;
				answer[i] = p;
			}
		}
		// 오른쪽부터
		p = 1000; // p 초기화
		for (int i=str.length()-1; i>=0; i--) {
			if (str.charAt(i)==c) p = 0;
			else {
				p++;
				answer[i] = Math.min(answer[i], p); // 기존에 있던 값과 p 중 더 작은 값
			}
		}
		
		return answer;
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String str = scanner.next();
		char c = scanner.next().charAt(0);
		for (int x : solution(str, c)) {
			System.out.print(x + " ");
		}
	}

}

결과

입력
hellohihahaha h

출력
0 1 2 2 1 0 1 0 1 0 1 0 1 

댓글