난이도 : 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 이므로 시간 복잡도 상 문제는 없어보인다.
해당 문제는 별다른 알고리즘은 떠오르지 않아 구현 스타일로 접근할 예정이다.
먼저 단어들의 첫글자가 우선이 되어야 함으로 단어들의 첫글자들을 먼저 탐색해서 바꾸는 작업을 진행할 것이다.
그 뒤로 첫 글자들이 바뀌지 않았다면 처음 문자부터 차례대로 바꿔나가는 방법을 사용할 것이다.
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)