[백준][Java] 1283번 : 단축키 지정

2025. 8. 5. 16:30·PS/백준

[문제 링크]

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
'PS/백준' 카테고리의 다른 글
  • [백준][Java] 14226번 : 이모티콘
  • [백준][Java] 1697번 : 숨바꼭질
  • [백준][Java] 1149번 : rgb 거리
  • [백준][Java] 13335번 : 트럭
nyrimmm
nyrimmm
  • nyrimmm
    개발기록
    nyrimmm
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (86) N
      • Java (6)
      • Spring & SpringBoot (3)
      • Network (1)
      • DataBase (0)
      • SQL (1)
      • IntelliJ (3)
      • Git (0)
      • 자료구조 & 알고리즘 (2)
      • 트러블 슈팅 (1)
        • Spring (1)
      • PS (68) N
        • 백준 (25) N
        • 프로그래머스 (0)
        • SQL (10)
        • 이코테 (33)
      • 후기 & 회고 (1)
  • 태그

  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
nyrimmm
[백준][Java] 1283번 : 단축키 지정
상단으로

티스토리툴바