[Algorithm] String 문자열 - 가장 짧은 문자거리

Jong Min ·2024년 8월 1일

Algorithm

목록 보기
5/30

가장 짧은 문자거리

설명

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

입력

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

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

출력

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

예시 입력예시 출력
teachermode e1 0 1 2 1 0 1 2 2 1 0

코드

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

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

      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;

      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);
        }
      }

      for(int i : answer){
        System.out.print(i+" ");
      }
    }

1. 거리 계산을 위한 배열 초기화:

answer 배열은 각 문자가 t와 떨어진 최소 거리를 저장합니다. 처음에 모든 값을 1000으로 설정합니다. 이는 매우 큰 값으로, 초기화된 상태임을 나타내기 위함입니다.

2. 왼쪽에서 오른쪽으로 거리 계산:

p를 1000으로 초기화합니다. p는 현재 위치에서 가장 가까운 t 문자의 위치를 나타내는 거리입니다. 문자열을 왼쪽에서 오른쪽으로 한 번 순회하면서, 현재 문자가 t와 같은지 확인합니다. 같다면 p를 0으로 설정하고, answer 배열의 해당 위치에 0을 저장합니다. 다르다면 p를 1 증가시키고, answer 배열의 해당 위치에 p 값을 저장합니다. 이는 t 문자와의 거리가 1만큼 멀어졌음을 의미합니다.

3.오른쪽에서 왼쪽으로 거리 계산:
다시 p를 1000으로 초기화하고, 이번에는 오른쪽에서 왼쪽으로 문자열을 순회합니다. 현재 문자가 t와 같다면 p를 0으로 설정합니다.
같지 않다면 p를 1 증가시키고, answer 배열의 현재 위치 값과 p 중 작은 값을 선택하여 업데이트합니다. 이는 두 방향에서 계산된 거리 중 작은 값을 선택하는 과정입니다.

profile
노력

0개의 댓글