ultra_dev
문자열.가장 짧은 문자거리 본문
10. 가장 짧은 문자거리
설명
한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.
출력
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
예시 입력 1
teachermode e
예시 출력 1
1 0 1 2 1 0 1 2 2 1 0
📌오른쪽부터 체크하는 for문. 왼쪽부터 체크하는 for문
📌Math.min(,)으로 더 작은 수 넣
import java.util.Scanner;
import java.util.*;
class Main {
public int[] solution(String str, char t) {
int[] answer = new int[str.length()];
//엄청 큰 수 일단 잡고
//왼쪽에서부터 체크하는 for문
int p = 1000;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == t) {
p = 0;
answer[i] = p;
} else {
p++;
answer[i] = p;
}
}
//주의!! 위에 for문 닫고 즉 위에 숫자가 입력된상태에서 밑에거랑 더 작은거로 바꾸는 것
//다시 오른쪽부터 체크하는 for문 하기!
p = 1000;
for (int j = str.length() - 1; j >= 0; j--) {
// answer가 0되는 건 위에랑 동일하니 주석처리 중복되니 굳이 안해줘도 되는 ㅋㅋ
// if(str.charAt(i) == t) {
// p=0;
// answer[j] = p;
// }
if (str.charAt(j) == t) p = 0;
else {
p++;
//
// answer[j] = p; <ㅡ 안됨 왜? 위에 왼쪽부터랑 지금 오른쪽부터랑 더 작은쪽 넣어줘야하니
//더 작은 값 넣어주기인 Math.min(,) 활용하기
answer[j] = Math.min(answer[j], p);
}
}
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.println(x + " ");
}
}
}
'알고리즘' 카테고리의 다른 글
문자열.암호 (0) | 2023.01.12 |
---|---|
문자열.문자열 압축 (0) | 2023.01.12 |
문자열. 숫자만 추출 (0) | 2023.01.12 |
문자열.유효한 팰린드롬 (0) | 2023.01.12 |
문자열.문장 속 단어(indexOf(),substring()) (0) | 2023.01.12 |
Comments