String_가장 짧은 문자 거리 구하기
✅ 한 개의 문자열 s와 문자 t가 주어졌을 때 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Main {
public int[] solution(String s, char t) {
int len = s.length();
int[] answer = new int[len];
int p = 1000; //큰 숫자 한개
for (int i = 0; i < len; i++) {
if (s.charAt(i) == t) {
p = 0; //t찾았으니 0으로 바꾸고
}
answer[i] = p;
p++; //0에서 1씩 늘려서 t에서부터 거리 구하기
}
p=1000; //p 다시 초기화
for (int j = len - 1; j >= 0; j--) {
if (s.charAt(j) == t) {
p = 0;
}
if(answer[j] > p){
answer[j] = p;
}
p++;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
String s= sc.next();
char t = sc.next().charAt(0);
for(int x: T.solution(s, t)){
System.out.print(x+" ");
}
}
}
//⭐️input:
// teachermode e
//⭐️output:
//1 0 1 2 1 0 1 2 2 1 0
- 먼저 왼쪽에서 오른쪽으로 for문을 돈다.
- 먼저 t가 나오는 index를 찾는다
- 그 다름 p를 아주 큰 수로 지정해두고(String길이가 100은 넘지 않는다고 하였으니 1000으로 둠)
- t가 나오는 index를 찾으면 p를 0으로 만든다.
- 그리고 지금은 왼쪽에 있는 t를 기준으로 p로부터 길이를 구할 것이기 때문에
- p값을 하나씩 늘려가면서 p++
- p로부터의 길이를 구해 array안에 값을 대체시킨다.
- 다음은 오른쪽에서 왼쪽으로 for문을 돌면서 똑같이 t로부터 거리를 구한다.
- 만약 오른쪽에서 구한 거리가 왼쪽에서 구한 거리보다 작다면 값을 바꾼다.
- 숫자를 한 줄로 출력하기 위해서는
System.out.print
를 사용한다.
🟢 더 작은 수를 구하는 Math.min
1
2
3
4
5
6
7
for (int j = len - 1; j >= 0; j--) {
if (s.charAt(j) == t) {
p = 0;
}
answer[j] = Math.min(answer[j], p);
p++;
}
🟢 내가 짠 코드(for문이 3개나 있음)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Main {
public int[] solution(String s, char t){
int len= s.length();
int[] ltArr= new int[len];
int[] rtArr= new int[len];
int p=1000;
for(int i=0; i<len; i++){
if(s.charAt(i)== t){
p=0;
}
ltArr[i] = p;
p++;
}
for(int j=len-1; j>=0; j--){
if(s.charAt(j) == t){
p=0;
}
rtArr[j] = p;
p++;
}
for(int l=0; l<len; l++){
if(ltArr[l] > rtArr[l]){
ltArr[l] = rtArr[l];
} else{
rtArr[l] = ltArr[l];
}
}
return ltArr;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
String s= sc.next();
char t = sc.next().charAt(0);
for(int x: T.solution(s, t)){
System.out.print(x+" ");
}
}
}
🔵 ThingsILearned
✔️ output이 1 0 1 2 1 0 1 2 2 1 0 이런식으로 배열도 아니고 list도 아니고 숫자의 나열로 출력하는 방법
for문을 돌면서 출력한다!
✔️ for문을 거꾸로 돌면서 더 작은 값 확인해보기
✔️더 작은 값을 구할때는 Math.min()
This post is licensed under CC BY 4.0 by the author.