Algorithm/inflearn

★가장 짧은 문자거리

마닐라 2021. 9. 6. 16:47

import java.util.Scanner;

class Main {
    public int[] solution(String s, char t) {
        int[] answer = new int[s.length()];

        //거리를 위한 변수를 높은 값으로 지정한 이유
        //어차피 오른쪽으로 탐색해서 1001이라는 값이 들어가더라도
        //왼쪽으로 탐색해서 거리 값이 정상적으로 들어간다.
        //0으로 지정해놓으면 자기 자신을 가리키는 변수와 중복이 되기때문도 있다!
        
        int p = 1000; //거리를 위한 변수
        //오른쪽부터 탐색
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == t) {
                p = 0; //자기 자신은 거리가 0
                answer[i] = p;
            } else {
                p++;
                answer[i] = p;
            }
            System.out.print(answer[i] + " ");
        }

        System.out.println();
        p=1000;
        //왼쪽 다시 탐색
        for(int i = s.length()-1; i >=0; i--) {
            if (s.charAt(i) == t) {
                p = 0; //자기 자신은 거리가 0
                //answer[i] = p; 다시 넣을 필요 없음
            } else {
                p++;
                //둘 중 작은 값을 넣어라.
                answer[i] = Math.min(answer[i], p);
            }
        }

        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);

        String str = kb.next();
        char c = kb.next().charAt(0);

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



    }
}

'Algorithm > inflearn' 카테고리의 다른 글

암호  (0) 2021.09.06
문자열 압축  (0) 2021.09.06
숫자만 추출  (0) 2021.09.04
유효한 팰린드롬  (0) 2021.09.04
회문 문자열  (0) 2021.09.04