[문제 링크]
https://www.acmicpc.net/problem/1283
문제 설명
5개 이하의 단어로 이루어진 옵션들에 대표 알파벳을 지정해서 단축키를 만든다.
하나의 옵션에 대해 단축키를 지정하는 방법은 아래와 같다.
1. 옵션의 왼쪽에서 오른쪽 순으로 단어의 첫 글자를 단축키로 지정할 수 있는 경우, 그 알파벳을 단축키로 지정
2. 옵션의 모든 단어의 첫 글자가 이미 지정되어 있는 경우, 왼쪽에서부터 차례대로 보면서 단축키로 지정할 수 있는 알파벳으로 단축키 지정
3. 옵션을 이루는 모든 알파벳이 이미 단축키로 지정되어 있어 어떠한 것도 지정할 수 없는 경우, 그대로 놔둔다.
1 ~ n번째 옵션까지 단축키를 지정해서 출력
문제 풀이
배열 alpha : 각 알파벳이 단축키로 사용되었는지 아닌지를 체크하는 배열
flag : 해당 옵션에 단축키 지정을 했는지 안했는지를 나타내는 변수
옵션의 각 단어의 첫 글자 중에서 단축키로 지정할 수 있는지 확인
- str.split(" " )으로 옵션을 단어로 나눠서 저장한 후, 각 단어의 첫 글자를 확인
- 지정할 수 있다면, alpha에서 해당 알파벳 true, flag = true(해당 옵션에 단축키 지정을 완료했음을 의미)
모든 첫 글자가 이미 단축키 지정이 되어있는 경우, 첫 글자 외 다른 글자를 단축키로 지정할 수 있는지 확인
- 옵션의 알파벳을 모두 소문자로 변경한 후, 왼쪽부터 차례로 확인
- " "(공백)을 구분하기 위해서
w >= 0
조건 추가
위의 두 경우에서 단축키 지정을 하지 못한 경우, 옵션 문자열 그대로 출력
전체코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
boolean[] alpha = new boolean[26]; //단축키로 사용될 알파벳 체크
boolean flag; //단축키 지정 상태
while (n > 0) {
String str = br.readLine();
String[] words = str.split(" ");
flag = false;
//옵션의 각 단어의 첫 글자가 단축키로 지정될 수 있는지 탐색
for (int i = 0; i < words.length; i++) {
String lowerWord = words[i].toLowerCase();
int first = lowerWord.charAt(0) - 'a';
if (!alpha[first]) { //첫 번째 글자로 단축키를 지정할 수 있는 경우
words[i] = "[" + words[i].charAt(0) + "]" + words[i].substring(1, words[i].length());
alpha[first] = true;
flag = true;
break;
}
}
if (flag) {
for (String word : words) {
sb.append(word + " ");
}
sb.append("\n");
} else {//첫 번째 글자로 단축키를 지정할 수 없는 경우
String lowerStr = str.toLowerCase();
for (int i = 0; i < lowerStr.length(); i++) {
int w = lowerStr.charAt(i)- 'a';
if (w >= 0 && !alpha[w]) {
str = str.substring(0, i) + "[" + str.charAt(i) + "]" + str.substring(i + 1, str.length());
sb.append(str + "\n");
alpha[w] = true;
flag = true;
break;
}
}
}
//어떠한 것도 단축키로 지정할 수 없는 경우
if (!flag) {
sb.append(str + "\n");
}
n--;
}
System.out.println(sb);
}
}
'PS > 백준' 카테고리의 다른 글
[백준][Java] 14226번 : 이모티콘 (0) | 2025.08.17 |
---|---|
[백준][Java] 1697번 : 숨바꼭질 (2) | 2025.07.26 |
[백준][Java] 1149번 : rgb 거리 (1) | 2025.07.21 |
[백준][Java] 13335번 : 트럭 (2) | 2025.07.18 |
[백준][Java] 21921번 : 블로그 (3) | 2025.07.12 |