문제

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율

2 초 128 MB 3585 1277 1001 37.323%

문제

한글 프로그램의 메뉴에는 총 N개의 옵션이 있다. 각 옵션들은 한 개 또는 여러 개의 단어로 옵션의 기능을 설명하여 놓았다. 그리고 우리는 위에서부터 차례대로 각 옵션에 단축키를 의미하는 대표 알파벳을 지정하기로 하였다. 단축키를 지정하는 법은 아래의 순서를 따른다.

  1. 먼저 하나의 옵션에 대해 왼쪽에서부터 오른쪽 순서로 단어의 첫 글자가 이미 단축키로 지정되었는지 살펴본다. 만약 단축키로 아직 지정이 안 되어있다면 그 알파벳을 단축키로 지정한다.
  2. 만약 모든 단어의 첫 글자가 이미 지정이 되어있다면 왼쪽에서부터 차례대로 알파벳을 보면서 단축키로 지정 안 된 것이 있다면 단축키로 지정한다.
  3. 어떠한 것도 단축키로 지정할 수 없다면 그냥 놔두며 대소문자를 구분치 않는다.
  4. 위의 규칙을 첫 번째 옵션부터 N번째 옵션까지 차례대로 적용한다.

입력

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

출력

N개의 줄에 각 옵션을 출력하는데 단축키로 지정된 알파벳은 좌우에 [] 괄호를 씌워서 표현한다.

풀이

시간 복잡도

N = 30, 단어 갯수 = 5, 단어 길이 = 10 이므로, 시간제한 2초에는 충분히 들어올 수 있다.

  1. 문자열을 단어 단위로 분리한다.
  2. 단어의 첫번째 글자가 단축키가 될 수 있다면 해당 문자열 배열의 값을 변경 함.
  3. 만약 2번 과정에서 단축키를 찾지 못했다면 문자열 순서대로 단축키로 사용가능한 값을 찾아서 해당 문자열 배열의 값을 변경 함.
  4. 분리한 문자열을 합쳐서 출력

코드

package com.company.baekjoon;

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

public class B1283 {
    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());
        HashSet<Character> set = new HashSet<>();

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < N; i++) {
            boolean hasCommand = false;
            String[] input = br.readLine().split(" ");

            for (int j = 0; j < input.length; j++) {
                if (!set.contains(Character.toLowerCase(input[j].charAt(0))) && !hasCommand) {
                    set.add(Character.toLowerCase(input[j].charAt(0)));
                    result.append(input[j]);
                    result.insert(0, "[");
                    result.insert(2, "]");
                    input[j] = result.toString();
                    hasCommand = true;
                    result.setLength(0);

                }
            }
            if (!hasCommand) {
                for (int j = 0; j < input.length; j++) {
                    for (int k = 0; k < input[j].length(); k++) {
                        if (!set.contains(Character.toLowerCase(input[j].charAt(k))) && !hasCommand) {
                            set.add(Character.toLowerCase(input[j].charAt(k)));
                            result.append(input[j]);
                            result.insert(k, "[");
                            result.insert(k+2, "]");
                            input[j] = result.toString();
                            hasCommand = true;
                            result.setLength(0);
                        }
                    }
                }
            }
            for (int j = 0; j < input.length; j++) {
                if (j == input.length -1) sb.append(input[j]);
                else sb.append(input[j]).append(" ");
            }
            sb.append("\\n");
        }
        System.out.println(sb);
    }
}

+ Recent posts