백준 1283 - 단축키 지정
Updated:
Java
1283 번 - 단축키 지정
문제
접근 방법
옵션(한 줄)을 하나씩 받아 1,2,3 번 중 해당하는 조건에 따라 출력한다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n;
static boolean[] vis;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
n = stoi(br.readLine());
vis = new boolean[26];
List<String> word, bak;
String str;
// 옵션을 하나씩 받는다.
next : for(int turn = 0; turn < n; turn++){
word = new ArrayList<>();
bak = new ArrayList<>();
stk = new StringTokenizer(br.readLine());
while(stk.hasMoreTokens()){
str = stk.nextToken();
word.add(str.toLowerCase());
bak.add(str);
}
int size = word.size(), idx;
char[] charArr;
// 1번 : 왼쪽 단어부터 오른쪽 순서로 단어의 첫 글자가 이미 단축키로 지정되었는지 살펴본다
for(int i = 0; i < size; i++){
idx = word.get(i).charAt(0) - 'a';
if(!vis[idx]){
vis[idx] = true;
System.out.println(makeShortcut(i, 0, size, bak));
continue next;
}
}
// 2번 : 만약 모든 단어의 첫 글자가 이미 지정이 되어있다면 왼쪽에서부터 차례대로 알파벳을 보면서 단축키로 지정 안 된 것이 있다면 단축키로 지정한다.
for(int i = 0; i < size; i++){
charArr = word.get(i).toCharArray();
for(int j = 0; j < charArr.length; j++) {
idx = charArr[j] - 'a';
if(!vis[idx]){
vis[idx] = true;
System.out.println(makeShortcut(i, j, size, bak));
continue next;
}
}
}
// 3번 : 어떠한 것도 단축키로 지정할 수 없다면 그냥 놔두며 대소문자를 구분치 않는다.
for(int i = 0; i < size; i++) {
System.out.print(bak.get(i) + " ");
}
System.out.println();
}
br.close();
}
// [ ]를 추가할 단어의 알파벳 위치를 받아 단축키를 만든다.
// wIdx : 단어 위치 / cIdx : 알파벳 위치
static String makeShortcut(int wIdx, int cIdx, int size, List<String> list){
StringBuilder result = new StringBuilder();
char[] charArr;
int len;
// 단어를 순회하여 StringBuilder에 추가한다.
for(int i = 0; i < size; i++){
charArr = list.get(i).toCharArray();
len = charArr.length;
for(int j = 0; j < len; j++) {
if(i == wIdx && j == cIdx)
result.append("[").append(charArr[j]).append("]");
else
result.append(charArr[j]);
}
result.append(" ");
}
return result.toString();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}