알고리즘

[BOJ1283/Java] 단축키 지정

IT 참다랑어 2023. 9. 19. 01:46

문제 요약

https://www.acmicpc.net/problem/1283

 

1283번: 단축키 지정

첫째 줄에 옵션의 개수 N(1 ≤ N ≤ 30)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄에 옵션을 나타내는 문자열이 입력되는데 하나의 옵션은 5개 이하의 단어로 표현되며, 각 단어 역시 10개 이하

www.acmicpc.net

문제를 이해하는 것은 어렵지 않았다. 다만 대소문자 처리가 복잡했을 뿐..

문제에서 지정한 규칙에 따르면 이미 지정된 알파벳과 겹치지 않게 단축키를 지정해야했다.

일단 단어의 시작을 먼저 살펴보고 그 다음에는 단어의 중간글자들도 앞에서부터 차례대로 살펴본다.

등록할 수 있는 단어가 없다면 원형 그대로를 출력

 

입/출력

단축키로 지정된 알파벳 좌우에 대괄호!

 

접근 아이디어

일단 'A'~'Z'에 단축키가 지정되어 있는지를 확인하는 boolean 배열을 두고

입력된 단어를 차례로 탐색하며 string builder를 이용해서 단어에 대한 처리를 하고자 했다.

코드가 복잡하지 않으니 코드의 주석을 통해서 나머지를 이해해보자!

 

작성 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder ans = new StringBuilder();
		int N = Integer.parseInt(br.readLine());
		boolean[] alpha = new boolean[26]; //단축키 등록 확인 배열
		xx: for (int i = 0; i < N; i++) {
			String str = br.readLine();
			String[] input = str.split(" "); 
            //단어 첫번째 글자 등록 여부 확인
			for (int j = 0; j < input.length; j++) {
				int a = input[j].charAt(0)-'A'; 
				if(a >= 26) a-=32; //소문자 처리
				if (!alpha[a]) { //아직 등록이 되지 않았다면
					alpha[a] = true;
                    //괄호 씌우기
					StringBuilder sb = new StringBuilder();
					sb.append(input[j]);
					sb.insert(0, '[');
					sb.insert(2, ']');
					input[j] = sb.toString();
					for (int k = 0; k < input.length; k++) {
						ans.append(input[k]).append(' ');
					}
					ans.append('\n');
					continue xx;
				}
			}
            //첫글자 제외하고 다른 글자 확인
			for (int j = 0; j < input.length; j++) {
				for (int k = 1; k < input[j].length(); k++) {
					int a = input[j].charAt(k)-'A';
					if(a > 26) a-=32; //소문자 처리
					if (!alpha[a]) { //아직 등록이 되지 않았다면
						alpha[a] = true;
                        //괄호 씌우기
						StringBuilder sb = new StringBuilder();
						sb.append(input[j]);
						sb.insert(k, '[');
						sb.insert(k + 2, ']');
						input[j] = sb.toString();
						for (int l = 0; l < input.length; l++) {
							ans.append(input[l]).append(' ');
						}
						ans.append('\n');
						continue xx;
					}
				}
			}

			for (int l = 0; l < input.length; l++) {
				ans.append(input[l]).append(' ');
			}
			ans.append('\n');
		}
		System.out.println(ans.toString());
	}

}

 

'알고리즘' 카테고리의 다른 글

[BOJ20437/Java] 문자열 게임 2  (0) 2023.09.20
[BOJ2110/Java] 공유기 설치  (0) 2023.09.20
[BOJ11049/Java] 행렬 곱셈 순  (1) 2023.09.14
[BOJ2533/Java] 사회망 서비스(SNS)  (0) 2023.09.10
[BOJ2688/Java] 줄어들지 않아  (0) 2023.09.07