문제 설명
일반 알파벳 순서와 달리 민식어는 "a b k d e g h i l m n ng o p r s t u w y" 순서를 따릅니다.
민식어 중 ng는 하나의 알파벳으로 간주됩니다.
민식어로 만든 n개의 단어가 주어졌을 때, 민식어를 기준으로 순서대로 리턴합니다.
알고리즘
1. 딕셔너리의 키를 민식어로 두고, 순서에 따라서 값으로 알파벳을 정의합니다. (문자를 기준으로 정렬하기 때문에 숫자로 값을 정의하면 12 > 101와 같은 경우가 발생합니다. )
- 민식어 중에서 "ng"는 "z"와 같이 민식어에 포함되지 않는 알파벳을 정의합니다.
2. 민식어로 만든 단어들을 입력받고, 각 단어에서 "ng"를 찾아서 다른 알파벳으로 바꿉니다. 알고리즘 1번에서 언급했듯이 민식어에 포함되지 않는 알파벳으로 선택해야 합니다.
3. 반복문으로 민식어로 만든 문자를 한 글자씩 추출하여 딕셔너리의 키 값으로 넣습니다. value로 나온 것을 더하여 알파벳으로 치환합니다.
4. 민식어에서 알파벳으로 치환된 문자는 여러 개의 민식어가 저장된 리스트의 인덱스 번호와 함께 새로운 리스트에 담은 뒤, 문자를 기준으로 정렬합니다.
5. 정렬된 문자를 순서대로 뽑으며, 저장했던 인덱스 번호로 민식어를 출력합니다.
코드
import sys
# sys.stdin = open("C:/Users/JIn/PycharmProjects/coding_Test/input.txt", "rt")
# key: ng => z (there is no 'z' in Minsik.)
minsik = {"a": 'A', "b": 'B', "k": 'C', "d": 'D', "e": 'E', "g": 'F', "h": 'G', "i": 'H', "l": 'I', "m": 'J', "n": 'K',
"z": 'L', "o": 'M',
"p": 'N', "r": 'O', "s": 'P', "t": 'Q', "u": 'R', "w": 'S', "y": 'T'}
n = int(sys.stdin.readline())
words = [sys.stdin.readline().rstrip() for _ in range(n)]
cvtWords = []
for i in range(n):
word = words[i].replace('ng', 'z')
cvtWord = ''
for ch in word:
cvtWord += minsik[ch]
cvtWords.append([cvtWord, i])
cvtWords.sort(key=lambda x: x[0])
for _, i in cvtWords:
print(words[i])
'코딩 테스트' 카테고리의 다른 글
[병합정렬][백준1517] 버블 소팅 (0) | 2021.04.05 |
---|---|
[구현, 프로그래머스] 쿼드 압축 후 개수세기 (0) | 2021.03.22 |
[백준 5052] 전화번호 목록 (0) | 2021.03.08 |
[백준 5014] 스타트링크 (0) | 2021.02.28 |
[백준 11508] 2+1 세일 (0) | 2021.02.28 |