[알고리즘] 01.String / 10.가장 짧은 문자거리

1 minute read

가장 짧은 문자거리

설명

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.

입력

첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.

출력

첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.

예시 입력 1

teachermode e

예시 출력 1

1 0 1 2 1 0 1 2 2 1 0

코드

import java.util.Scanner;
public class JC_0110 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JC_0110 T = new JC_0110();
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		System.out.println(T.solution(str));
	}

	//teachermode e
	public String solution(String str) {

		String[] arrStr = str.split(" ");

		int count = 1000;
		String answer = "";
		int[] arrResult = new int[arrStr[0].length()];

		//왼쪽에서 오른쪽으로 탐색
		for(int i=0; i<arrStr[0].length(); i++){
			if((arrStr[0].charAt(i)+"").equals(arrStr[1])) { //같으면
				count = 0;
				arrResult[i] = count;
			}else { //다르면
				count++;
				arrResult[i] = count;
			}
		}

		count = 1000;
		//오른쪽에서 왼쪽으로 탐색
		for(int i=arrStr[0].length()-1; i >=0; i--){
			if((arrStr[0].charAt(i)+"").equals(arrStr[1])) { //같으면
				count = 0;
			}else { //다르면
				count++;
				if(arrResult[i] > count) {
					arrResult[i] = count;
				}
			}
		}

		for(int i=0; i<arrResult.length; i++){
			answer += arrResult[i] + " ";
		}

		return answer;
	}
}


//풀이 2

*import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main T = new Main();
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		char c = sc.next().charAt(0);

		for(int x : T.solution(str, c)) {
			System.out.print(x + " ");
		}
	}

	//teachermode e
	public int[] solution(String str, char c) {

		int[] answer = new int[str.length()];

		int count = 1000;

		//왼쪽에서 오른쪽으로
		for(int i=0; i<str.length(); i++) {
			//c와 같으면
			if(str.charAt(i)==c) {
				count = 0;
				answer[i] = count;
			}else {//다르면
				count++;
				answer[i]=count;
			}
		}
		count = 1000;
		//오른쪽에서 왼쪽
		for(int i=str.length()-1; i>=0; i--) {
			//c와 같으면
			if(str.charAt(i)==c) {
				count = 0;
			}else {//다르면
				count++;
				answer[i] = Math.min(answer[i], count);
			}
		}

		return answer;
	}
}