본문 바로가기

알고리즘

가장 짧은 문자거리

설명

한 개의 문자열 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 Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        char[] c = sc.next().toCharArray();
        int t = sc.next().charAt(0);

        int startIndex = 1000; // 이 부분은 생각을 못했다. 앞 글자 끝 글자 순서를 위해서 충분히 길게
        int lastIndex = c.length - 1; // 마지막 인덱스

        int[] result = new int[c.length];
        for (int i = 0; i < c.length; i++) { 
            if (c[i] == t) { // 찾는 문자와 같으면 배열에 0 넣음, 넣을 값 0으로 초기화
                startIndex = 0; 
                result[i] = 0;

            } else { // 아니라면 넣을 값 증가
                startIndex++;
            }
            result[i] = startIndex; // 이 후 배열에 넣을 값 넣음
            System.out.println(result[i]);
        } 

        for (int i = lastIndex; i >= 0; i--) { // 거꾸로 돌림
            if (c[i] == t) { // 위와 동일
                startIndex = 0; 
                result[i] = startIndex;

            } else {
                startIndex++; // 아니면 넣을 값을 증가 시키고 기존 배열 값보다 크다면 작은값 넣음
                if (result[i] > startIndex) {
                    result[i] = startIndex;
                }
            }
        }

        for(int i = 0; i < result.length; i++) {
            System.out.print(result[i] + " ");
        }
    }
}

 

'알고리즘' 카테고리의 다른 글

암호  (0) 2024.07.17
문자열 압축  (0) 2024.07.09
유효한 팰린드롬  (0) 2024.07.02
회문 문자열  (0) 2024.07.02
특정 문자 뒤집기  (0) 2024.07.01