반응형
한 개의 문자열 a와 문자 b가 주어지면 문자열 a의 각 문자가 문자 b와 떨어진 최소거리를 출력하는 알고리즘 문제
import java.util.Scanner;
public class Main {
public int[] solution(String s, char c) {
int[] answer = new int[s.length()];
int num = 1000;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == c){
num = 0;
} else {
num++;
}
answer[i] = num;
}
num = 1000;
for (int i = s.length()-1; i>=0; i--){
if (s.charAt(i) == c){
num = 0;
} else {
num++;
answer[i] = Math.min(answer[i], num);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
char c = sc.next().charAt(0);
for (int x : T.solution(str, c)) {
System.out.print(x + " ");
}
}
}
이 문제를 풀때 왜 첫번째 숫자를 0이아닌 1000을 넣어야 하는지 이해를 하지 못했습니다.
다른 케이스문제를 보고 디버깅을 한 후
num이 0이라면 찾는 단어가 c라면
a | b | c | d | e | f | d |
1 | 1 | 0 | 1 | 2 | 3 | 4 |
a는 오른쪽에서 올바른 거리를 찾는다 하더라도 최소값이 1이기 때문에 실패하는 케이스가 됩니다.
num이 1000이라면
a | b | c | d | e | f | d |
1001 | 1 | 0 | 1 | 2 | 3 | 4 |
왼쪽부터 for문을 돌린다면 1001이 될것이고
다시 오른쪽으로 for문을 돌린다면
a | b | c | d | e | f | d |
2 | 1 | 0 | 1 | 2 | 3 | 4 |
올바른 값 2가 나올것입니다.
반응형
'Algorithm > Java알고리즘 문제풀이 & Kotlin' 카테고리의 다른 글
[Algorithm] 암호 (0) | 2022.06.22 |
---|---|
[Algorithm] 문자열 압축 (0) | 2022.06.21 |
[Algorithm] 문장 속 단어 (0) | 2022.03.20 |
[Algorithm] 대소문자 변환 (0) | 2022.03.20 |
[Algorithm] 문자 찾기(String) (0) | 2022.03.18 |
반응형
한 개의 문자열 a와 문자 b가 주어지면 문자열 a의 각 문자가 문자 b와 떨어진 최소거리를 출력하는 알고리즘 문제
import java.util.Scanner;
public class Main {
public int[] solution(String s, char c) {
int[] answer = new int[s.length()];
int num = 1000;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == c){
num = 0;
} else {
num++;
}
answer[i] = num;
}
num = 1000;
for (int i = s.length()-1; i>=0; i--){
if (s.charAt(i) == c){
num = 0;
} else {
num++;
answer[i] = Math.min(answer[i], num);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
char c = sc.next().charAt(0);
for (int x : T.solution(str, c)) {
System.out.print(x + " ");
}
}
}
이 문제를 풀때 왜 첫번째 숫자를 0이아닌 1000을 넣어야 하는지 이해를 하지 못했습니다.
다른 케이스문제를 보고 디버깅을 한 후
num이 0이라면 찾는 단어가 c라면
a | b | c | d | e | f | d |
1 | 1 | 0 | 1 | 2 | 3 | 4 |
a는 오른쪽에서 올바른 거리를 찾는다 하더라도 최소값이 1이기 때문에 실패하는 케이스가 됩니다.
num이 1000이라면
a | b | c | d | e | f | d |
1001 | 1 | 0 | 1 | 2 | 3 | 4 |
왼쪽부터 for문을 돌린다면 1001이 될것이고
다시 오른쪽으로 for문을 돌린다면
a | b | c | d | e | f | d |
2 | 1 | 0 | 1 | 2 | 3 | 4 |
올바른 값 2가 나올것입니다.
반응형
'Algorithm > Java알고리즘 문제풀이 & Kotlin' 카테고리의 다른 글
[Algorithm] 암호 (0) | 2022.06.22 |
---|---|
[Algorithm] 문자열 압축 (0) | 2022.06.21 |
[Algorithm] 문장 속 단어 (0) | 2022.03.20 |
[Algorithm] 대소문자 변환 (0) | 2022.03.20 |
[Algorithm] 문자 찾기(String) (0) | 2022.03.18 |