현재
10. 가장 짧은 문자거리 본문
설명
첫번째문자열과 두번째 문자열의 최단거리를 구하시오
예시 입력 1
teachermode e
예시 출력 1
1 0 1 2 1 0 1 2 2 1 0
<힌트>
더보기
- Math.min(a,b)
- 초기값에 주의하여야 한다.
<풀이코드>
더보기
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
char inputList[] = sc.next().toCharArray();
char cha = sc.next().charAt(0);
int leftList[] = new int[inputList.length];
int leftCnt = 100;
int rightList [] = new int[inputList.length];
int rightCnt = 100;
for(int i = 0; i < inputList.length ; i++){
if(inputList[i] == cha){
leftCnt = 0;
} else {
leftCnt++;
}
leftList[i] = leftCnt;
}
for(int i = inputList.length-1; i >= 0 ; i--){
if(inputList[i] == cha){
rightCnt = 0;
} else {
rightCnt++;
}
rightList[i] = rightCnt;
}
int answerList[] = new int[inputList.length];
for(int i = 0; i < inputList.length ; i++){
answerList[i] = Math.min(rightList[i], leftList[i]);
}
for(int e : answerList){
System.out.print(e + " ");
}
//teachermode e
sc.close();
}
}
<정답코드>
더보기
import java.util.*;
class Main {
public int[] solution(String s, char t){
int[] answer=new int[s.length()];
int p=1000;
for(int i=0; i<s.length(); i++){
if(s.charAt(i)==t){
p=0;
answer[i]=p;
}
else{
p++;
answer[i]=p;
}
}
p=1000;
for(int i=s.length()-1; i>=0; i--){
if(s.charAt(i)==t) p=0;
else{
p++;
answer[i]=Math.min(answer[i], p);
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str=kb.next();
char c=kb.next().charAt(0);
for(int x : T.solution(str, c)){
System.out.print(x+" ");
}
}
}
'알고리즘 > 기타알고리즘문제' 카테고리의 다른 글
| 12. 암호 (0) | 2024.04.09 |
|---|---|
| 11. 문자열 압축 (0) | 2024.04.08 |
| 8. 유효한 팰린드롬 (0) | 2024.04.03 |
| 7. 회문 문자열 (0) | 2024.04.03 |
| 6. 중복문자제거(indexOf()) (0) | 2024.04.03 |