[백준] 단축키 지정 (1283번)

Bae Jae Min·2024년 9월 28일

난이도 : Silver2
Link : https://www.acmicpc.net/problem/1283
Tag : 구현, 문자열
풀이일자 : 2024년 9월 29일

📌 문제 탐색하기

N : 옵션의 개수
Word : 옵션 이름
Words : 두 단어 이상 일 때 첫 문자를 우선시 하기 위해 만든 배열

이 문제는 단축키를 지정하는 문제이다.
1. 첫 글자가 이미 단축키로 지정되어 있지 않다면 단축키로 지정
2. 모든 단어의 첫 글자가 이미 단축키라면 왼쪽부터 차례대로 지정
3. 어떠한 것도 지정할 수 없다면 그대로 놔두기 + 대소문자 구분 x

해당 조건들을 만족시키면 되는 문제이다.

가능한 시간복잡도

N(1 ≤ N ≤ 30)
옵션의 개수는 최대 30개이고 하나의 옵션은 5개 이하의 단어이며 10개 이하의 알파벳 이므로 한 옵션의 최대치는 10 x 5 x 30 이므로 시간 복잡도 상 문제는 없어보인다.

📌 문제 접근 방법

해당 문제는 별다른 알고리즘은 떠오르지 않아 구현 스타일로 접근할 예정이다.
먼저 단어들의 첫글자가 우선이 되어야 함으로 단어들의 첫글자들을 먼저 탐색해서 바꾸는 작업을 진행할 것이다.
그 뒤로 첫 글자들이 바뀌지 않았다면 처음 문자부터 차례대로 바꿔나가는 방법을 사용할 것이다.

📌 코드 설계하기

  1. N을 입력받는다.
  2. 단축어로 지정한것을 저장하는 hotkey 배열을 만든다.
  3. 정답을 출력할 것들을 저장할 배열 answer을 만든다.
  4. n만큼 반복하며 옵션들을 입력받는다.
  5. 옵션의 단어 개수가 여러개일 수 있기 때문에 words를 통해 분리시킨다.
  6. 단어들의 첫 글자들을 먼저 검사한다.
    • 만일 단어들의 첫글자가 hotkey에 배정되지 않았다면 배정시키고 break시켜버린다.
    • 모든 단어들을 탐색한뒤 배정을 했다면 setting을 true로 바꿔준다
  7. setting이 false라면 왼쪽부터 차례대로 글자들을 배정한다.
  8. answer을 출력한다.

📌 시도 회차 수정 사항

📌 정답 코드

n = int(input())
hotkey = []
answer = []

for i in range(n):
    word = input()
    words = word.split()
    setting = False
    for j in range(len(words)):
        first_char = words[j][0]
        if first_char.upper() not in hotkey:
            hotkey.append(first_char.upper())
            words[j] = '[' + first_char + ']' + words[j][1:]
            answer.append(' '.join(words))
            setting = True
            break

    if not setting:
        for char in word:
            if char.upper() not in hotkey and char != ' ':
                hotkey.append(char.upper())
                tmp = '[' + char + ']'
                index = word.index(char)
                answer.append(word[:index] + tmp + word[index + 1:])
                setting = True
                break
    if not setting:
        answer.append(word)

for i in answer:
    print(i)



0개의 댓글