String(스트링) 10. 문자 거리
* 사용 언어 : JAVA
* Inflearn의 자바(Java)알고리즘 문제풀이 : 코딩테스트 대비 강의내용 정리
1. 문제
한 개의 문자열 s와 문자 t가 주어지면 s의 각 문자와 t가 떨어진 최소거리 출력
문자열과 문자는 순서대로 모두 소문자로만 주어지고, 길이는 100을 넘지 않음
// 입력
teachermode
e
// 출력
1 0 1 2 1 0 1 2 2 1 0
2. 풀이
주어진 문자열을 문자 배열로 변경한다. 문자열은 100을 넘지 않기 때문에 p를 1000으로 크게 넣는다.
첫번째 for문을 사용하여 주어진 문자와 문자열을 왼쪽에서 오른쪽으로 비교한다. 문자열이 주어진 문자와 같지 않으면 p를 1씩 증가시키고 배열에 저장한다. 문자열이 주어진 문자와 같으면 p를 0으로 초기화하여 배열에 저장한다.
두번째 for문을 사용하여 주어진 문자와 문자열을 오른쪽에서 왼쪽으로 비교한다. 먼저 p는 1000으로 초기화 시켜둔다. 문자열이 주어진 문자와 같으면 p를 0으로 초기화하고 배열에 저장한다. 문자열이 주어진 문자와 같지않으면 p를 1씩 증가시키고 거리가 저장된 배열의 p와 비교하여 p가 더 작은 값을 배열에 저장한다.
3. 코드
public 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) {
Main T = new Main();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
char c = scanner.next().charAt(0);
for (int i : T.solution(str, c)) {
System.out.print(i + " ");
}
}
}
4. Keword
- Math
- min
'Algorithm' 카테고리의 다른 글
[자바 알고리즘 문제풀이] String 11. 문자열 압축 (0) | 2022.05.16 |
---|---|
[자바 알고리즘 문제풀이] Array 02. 보이는 학생 (0) | 2022.05.10 |
[자바 알고리즘 문제풀이] Array 01. 큰 수 출력하기 (0) | 2022.05.09 |
[자바 알고리즘 문제풀이] String 09. 숫자만 추출 (0) | 2022.03.21 |
[자바 알고리즘 문제풀이] String 08. 유효한 팰린드룸 (0) | 2022.03.07 |