딕셔너리 자료형을 사용할 경우, 보통 key값을 이용해 value를 가져오게 된다.
아래는 key값으로 모스부호, value값으로 알파벳이 저장된 딕셔너리를 이용해
모스부호를 해독하는 코드이다.
letter='.... . .-.. .-.. ---'
morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'}
arr = letter.split(' ') #입력된 모스부호 문자열을 공백으로 구분
answer = ''
for s in arr: #각 모스부호에 대응하는 알파벳 찾기
answer+=morse[s]
print(answer)
이 코드를 실행하면, 모스 부호로 작성된 '.... . .-.. .-.. ---' 을 key값으로 사용하여
각 key에 대응하는 value값인 'hello'가 출력된다.
그런데 가끔 value를 사용해 key값을 구해주고 싶을 때가 있을 수 있다.
이 경우 아래와 같은 2가지 방법을 사용할 수 있겠다.
1. 딕셔너리의 key값과 value값을 뒤집기
letter = 'hello'
morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'}
morse_reverse = {}
for i, j in morse.items(): #딕셔너리의 key와 value 뒤집어주기
morse_reverse[j] = i
answer=[]
for s in letter:
answer.append(morse_reverse[s])
print(' '.join(answer))
위와 같이 key와 value의 위치를 바꾸어준 딕셔너리를 새로 만들어 활용할 수 있다.
실행 결과는 'hello'를 모스 부호로 대치한 '.... . .-.. .-.. ---' 이 된다.
2. key값과 value값의 index를 활용해서 구하기
letter = 'hello'
morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'}
answer=[]
for s in letter:
answer.append(list(morse.keys())[list(morse.values()).index(s)])
print(' '.join(answer))
key와 value를 각각 리스트에 저장하고, value의 인덱스를 이용해 역으로 key값을 매치시켜 구한다.
실행 결과는 1번 코드와 같다.
'프로그래밍' 카테고리의 다른 글
[백준 C언어] 5397. 키로거 (0) | 2023.01.21 |
---|---|
[백준 C언어] 2581. 소수 (0) | 2023.01.03 |
[C, C++] 한글 입출력(printf, scanf) 시 오류가 날 때 해결 방법 (1) | 2022.12.08 |