한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
| 예시 입력 | 예시 출력 |
|---|---|
| teachermode e | 1 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 중 작은 값을 선택하여 업데이트합니다. 이는 두 방향에서 계산된 거리 중 작은 값을 선택하는 과정입니다.
