https://www.acmicpc.net/problem/1283
뭔가 오랜만에 보는 코테같은 문제...
진짜 구현 같은 문제?
각 줄마다 입력되는 단어를 공백으로 구분해서 배열로 추가한다
그럼 이차원 배열 형태가 된다
이차원 배열을 탐색하면서
i번째 원소를 k라고 둔다
k 안에도 여러 개의 단어가 들어있으니 다시 for문을 돌린다
k 안에 있는 j번째 단어는 key라고 지정한다
일단 각 단어의 첫 글자가 단축키로 지정이 되어야 하기 때문에
가장 먼저 key의 0번째 요소를 본다
(* 모든 요소를 비교할 때는 lower case로 바꿔서 비교해야 대소문자 구분없음 조건을 잘 충족할 수 있다
0번째 요소가 아직 단축키에 없으면(save 배열에 없으면)
save 배열에 key[0]요소를 추가한다
그리고 해당 단어를 출력 형식에 맞게 바꾸기 위해
[ key[0] ] + key[1:] 형태로 바꾼다
그리고 k값을 공백 join으로 묶어서 출력한다
flag값을 False로 바꿔서 아래 다른 경우들을 통과하게 만든다
i번째 k값에 대한 처리가 끝났으니 break 시킨다
만약 위 과정에서 break되지 않았다면
첫 글자가 이미 save 배열에 들어있는 경우이다
그럼 이제 다시 k 배열을 훑으면서
k안에 들어있는 j번째 단어의 2번째 이상 원소 중 단축키로 지정되지 않은 알파벳을 찾아야 한다
마찬가지로 j번째 단어는 key로 둔다
index를 추적해서 해당 번째 단어에 대괄호를 씌워야되기 때문에 enumerate로 for문을 돌린다
key 단어를 한글자씩 탐색했을 때 val.lower()가 save에 없으면 이 단어에 대괄호를 씌워야 한다
일단 save 배열에 현재 알파벳을 추가한다
k의 j번째 요소에 key[:index]+[+val+]+key[index+1] 값을 덮어씌운다
작업이 끝나면 k를 공백 포함 join으로 출력한 후 flag를 False로 바꾸고 break한다
만약 위 두 과정에서 break되지 않았다면
이미 k 배열 내의 모든 단어의 첫글자가 단축기로 지정되었을 뿐 아니라
모든 단어의 2번째 이상 글자들도 단축기로 지정되어 더 작업을 수행할 수 없는 경우이다
그럼 그냥 k배열을 공백 포함 join 해서 출력한다
그냥 지시사항을 step by step으로 잘 구현해주면 된다
n = int(input()) # 옵션 개수 입력
# 옵션 리스트 입력
a = [list(map(str, input().split())) for _ in range(n)]
# 단축키를 저장할 리스트
save = []
for i in range(n):
k = a[i]
flag = True # 단축키를 지정했는지 여부
for j in range(len(k)): # 단어의 첫 글자부터 확인
key = k[j]
if key[0].lower() not in save: # 첫 글자가 단축키로 지정되지 않았다면
save.append(key[0].lower()) # 단축키로 지정
k[j] = "[" + key[0] + "]" + key[1:] # 단축키로 지정된 글자 괄호 처리
print(' '.join(k)) # 출력
flag = False
break
if flag: # 첫 글자로 지정하지 못한 경우
for j in range(len(k)):
key = k[j]
for index, val in enumerate(key): # 단어 전체를 순회
if val.lower() not in save: # 단축키로 지정되지 않은 알파벳 발견
save.append(val.lower()) # 단축키로 지정
k[j] = key[:index] + "[" + val + "]" + key[index+1:] # 괄호 처리
print(' '.join(k)) # 출력
flag = False
break
if not flag:
break
if flag: # 아무 것도 지정하지 못한 경우
print(' '.join(k))
'개발자 강화 > 코딩 테스트' 카테고리의 다른 글
[백준] 17266 어두운 굴다리 / 이진탐색 / Python 실4 (0) | 2024.12.11 |
---|---|
[백준] 1522 문자열 교환 / 구현 / python 실1 (0) | 2024.12.04 |
[백준] 24037 문자열게임2 / 구현 / python 골5 (0) | 2024.12.02 |
[백준] 11501 주식 / 그리디 / python 실2 (0) | 2024.12.01 |
[백준] 2668 숫자고르기 / dfs / python 골5 (0) | 2024.11.30 |