한 개의 문자열 str와 문자 c가 주어지면 문자열 s의 각 문자가 문자 c와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.
첫 번째 줄에 문자열 str와 문자 c가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.
teachermode e
첫 번째 줄에 각 문자열 str의 각 문자가 문자 c와 떨어진 거리를 순서대로 출력한다.
1 0 1 2 1 0 1 2 2 1 0

문자열 str의 각 문자와 입력 받은 문자 c의 거리를 answer 배열에 저장한 후, 반복문을 통해 answer의 값들을 순차적으로 반환하는 방식을 사용했다.
💡
문자열 str의 n번째 문자가입력 받은 문자 c와 같다면 n번째 문자와입력 받은 문자 c의 거리는 0이다.
순방향 순회는 0번째 문자부터 시작해 입력 받은 문자 c와의 거리를 answer 배열에 저장한다.

n번째 문자가 입력 받은 문자 c와 같은 값이라면 answer[0]에 0을 저장하고, 같지 않다면 이전 Index 값의 1을 더한 값을 저장한다.
🤔 첫번째 문자는
입력 받은 문자 c과 같다면 문제가 없지만, 다를 경우에는 이전 값이 없기 때문에 문제가 발생한다. 이런 문제를 방지하기 위해 첫번째 문자에는 임의의 수를 크게 (ex, 1000) 잡아 저장한다.

입력 받은 문자 c와 같다면 p=0, 같지 않다면 p++한 후 저장한다.입력 받은 문자 c와 같다면 p=0, 같지 않다면 p++한 후 저장한다.순방향은 왼쪽의 입력 받은 문자 c와의 거리만 측정한다. 오른쪽에 위치한 입력 받은 문자 c의 거리가 더 작을 수 있기 때문에 역방향 순회를 해준다.

입력 받은 문자 c와 같다면 p=0, 같지 않다면 p++한다.입력 받은 문자 c와 같다면 p=0, 같지 않다면 p++한 후 저장한다.
class Main {
public int[] solution(String str, char c) {
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);
}
}
return answer;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String str = st.nextToken();
char c = st.nextToken().charAt(0);
int[] answer = T.solution(str, c);
for(int x : answer) {
System.out.print(x + " ");
}
}
}