[백준] 3961 터치스크린 키보드 - Java
char타입의 이차원 배열을 사용해 문자 간의 거리를 계산할 때 사용해줬고, 문자열과 문자열의 오차를 다루는 클래스를 생성해 정렬 시 사용해줬다.
import java.util.*;
import java.io.*;
import java.math.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
char[][] dictionary = new char[3][10];
String str1 = "qwertyuiop";
String str2 = "asdfghjkl ";
String str3 = "zxcvbnm ";
char[] a1 = str1.toCharArray();
char[] a2 = str2.toCharArray();
char[] a3 = str3.toCharArray();
dictionary[0] = a1;
dictionary[1] = a2;
dictionary[2] = a3;
for(int i=0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String input = st.nextToken();
int M = Integer.parseInt(st.nextToken());
Word[] arr = new Word[M];
for(int j=0; j<M; j++){
arr[j] = new Word(br.readLine(), 0);
}
for(int j=0; j<M; j++){
String target = arr[j].word;
int cnt = 0;
for(int k=0; k<target.length(); k++){
if(target.charAt(k) != input.charAt(k)){
int r1 = 0, c1 = 0, r2 =0 , c2 = 0;
loop1 : for(int m = 0; m<3; m++){
for(int n = 0; n<10; n++){
if(dictionary[m][n] == target.charAt(k)){
r1 = m;
c1 = n;
break loop1;
}
}
}
loop1 : for(int m = 0; m<3; m++){
for(int n = 0; n<10; n++){
if(dictionary[m][n] == input.charAt(k)){
r2 = m;
c2 = n;
break loop1;
}
}
}
cnt = cnt + Math.abs(r1 - r2) + Math.abs(c1 - c2);
}
}
arr[j].dis = cnt;
}
Arrays.sort(arr);
for(int a=0; a<M; a++){
System.out.println(arr[a].word + " " + arr[a].dis);
}
}
}
}
class Word implements Comparable<Word>{
String word;
int dis;
Word(String a, int b){
word = a;
dis = b;
}
public int compareTo(Word o2){
if(dis > o2.dis){
return 1;
}else if(dis < o2.dis){
return -1;
}else{
return word.compareTo(o2.word);
}
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1753 최단경로 - Java (0) | 2022.06.27 |
---|---|
[백준] 2252 줄 세우기 - Java (0) | 2022.06.24 |
[백준] 6166 문자열 암호화 - Java (0) | 2022.06.22 |
[백준] 1068 트리 - Java (0) | 2022.06.22 |
[백준] 3649 로봇 프로젝트 - Java (0) | 2022.06.12 |
댓글
이 글 공유하기
다른 글
-
[백준] 1753 최단경로 - Java
[백준] 1753 최단경로 - Java
2022.06.27 -
[백준] 2252 줄 세우기 - Java
[백준] 2252 줄 세우기 - Java
2022.06.24 -
[백준] 6166 문자열 암호화 - Java
[백준] 6166 문자열 암호화 - Java
2022.06.22 -
[백준] 1068 트리 - Java
[백준] 1068 트리 - Java
2022.06.22