1-10 가장 짧은 문자거리

정우·2022년 9월 27일

✏️ 문제


설명

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

입력

첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.

문자열의 길이는 100을 넘지 않는다.

출력

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

예제 입력 teachermode e
예제 출력 1 0 1 2 1 0 1 2 2 1 0


✏️ 코드

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        char ch = sc.next().charAt(0);
        
        for (int i : solution(str, ch)) {
            System.out.print(i + " ");
        }
    }
    
    public static int[] solution(String str, char ch) {
        int[] answer = new int[str.length()];
        int p = 1000;
        
        for (int i=0; i<str.length(); i++) {
            if (str.charAt(i) == ch) {
                p = 0;
                answer[i] = p;
            }
            else {
                p++;
                answer[i] = p;
            }
        } // end for
        
        p = 1000;
        
        for(int i=str.length()-1; i>=0; i--) {
            if (str.charAt(i) == ch) {
                p = 0;
                //answer[i] = p;
            }
            else {
                p++;
                answer[i] = Math.min(answer[i], p);
            }            
        }
        
        return answer;
        
    }
}

우선 예제입력인 teachermode e 를 살펴보면 가장 가까운 e로부터의 거리를 출력한다고 알 수 있다.
또한 문자열의 길이는 100을 넘지 않는다고 한다.

그렇기 때문에 answer [] 에 각 문자가 떨어져있는 거리를 구하기 위해서 우선 p라는 변수를 하나 생성하고 문자 최대 길이인 100보다 넉넉하게 큰 수인 1000으로 초기화 시켰다.

그 이후 str 배열을 돌면서 str[i]가 입력한 문자일 경우 p를 0으로 초기화하고 그렇지 않다면 p++를 해주었다.

그 결과 answer[] 에는 순서대로 1001, 0, 1, 2, 1, 0, 1, 2, 2, 1, 0 이 담기게 된다.
하지만 최단거리를 구해야하기 때문에 역순으로도 돌며 다시 배열에 값을 저장해야되는데 이때 기존의 answer[i] 값과 p 값을 비교하여
더 작은 값을 집어넣어야한다.

profile
That's it

0개의 댓글