문제 링크
https://www.acmicpc.net/problem/1283
나의 기록
✅ 알고리즘 분류 : 문자열, Set
✅ 성공 여부 : ✔
✅ 문제 난이도 : 실버1
✅ 체감 난이도 : Normal
접근 방법
알고리즘에 대한 어려움이라기보단 구현 방법에 대해 조금 고민할 수 있었던 문제. 제일 바깥의 for문에 pointA라는 별명을 붙여 조건 만족 시 continue로 다음 글자로 바로 넘어갈 수 있게 했다. Set을 통해 현재 등록되어 있는 문자들을 확인할 수 있도록 했는데, A와 a (대문자와 소문자)는 같은 문자 취급하므로 Uppercase와 Lowercase 각각 생성해 Set에 등록했다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
public class bj1283_단축키지정 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Set<Character> registered = new HashSet<>();
// i : N개의 입력되는 입력 문자열
pointA : for(int now = 0 ; now < N ; now++){
// 단어 단위로 분리한다.
String[] inputArr = br.readLine().split(" ");
// 1. 단어의 첫 글자가 단축키로 지정되었는지 확인한다.
for(int i = 0 ; i < inputArr.length ; i++){
// 지정되지 않은 것이 있을 경우
if(!registered.contains(inputArr[i].charAt(0))){
// set에 등록
registered.add(Character.toUpperCase(inputArr[i].charAt(0)));
registered.add(Character.toLowerCase(inputArr[i].charAt(0)));
// 현재 단어의 첫 번째 글자에 괄호를 씌워준다.
StringBuilder sb = new StringBuilder(inputArr[i]);
sb.insert(0, '[');
sb.insert(2, ']');
inputArr[i] = sb.toString();
// 출력 후 다음 입력으로 ㄱㄱ
printAnswer(inputArr);
continue pointA;
}
}
// 2. 모든 단어의 첫 글자가 이미 지정되어 있다면, 왼쪽에서부터 차례대로 본다.
for(int i = 0 ; i < inputArr.length ; i++){
for(int j = 0 ; j < inputArr[i].length() ; j++){
if(!registered.contains(inputArr[i].charAt(j))){
// set에 등록
registered.add(Character.toUpperCase(inputArr[i].charAt(j)));
registered.add(Character.toLowerCase(inputArr[i].charAt(j)));
// 현재 글자에 괄호를 씌워준다.
StringBuilder sb = new StringBuilder(inputArr[i]);
sb.insert(j, '[');
sb.insert(j+2, ']');
inputArr[i] = sb.toString();
// 출력 후 다음 입력으로 ㄱㄱ
printAnswer(inputArr);
continue pointA;
}
}
}
// 결국 아무것도 없었을 경우...
printAnswer(inputArr);
}
}
public static void printAnswer(String[] arr){
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < arr.length ; i++){
if(i == arr.length - 1) sb.append(arr[i]);
else sb.append(arr[i]).append(" ");
}
System.out.println(sb.toString());
}
}
'알고리즘 (Java)' 카테고리의 다른 글
(Java) 백준 9095 1, 2, 3 더하기 (0) | 2023.04.14 |
---|---|
(Java) 백준 11725 트리의 부모 찾기 (0) | 2023.04.14 |
(Java) 백준 10808 스택 (0) | 2023.03.22 |
(Java) 백준 2178 미로 탐색 (0) | 2023.03.17 |
(Java) 백준 17086 아기 상어 2 (0) | 2023.03.10 |