본문 바로가기

개발자 강화/코딩 테스트

[백준] 1283 단축키지정 / 구현 / Python 실1

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))