공부기록/Python
점프투파이썬 종합문제 Q16 모스부호 해독 Morse code decoder
lecor
2020. 5. 15. 16:45
#내코드
dic = {
'.-':'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'
}
def decodeMorse(data):
data = data.split(' ')
buff = list()
result = list()
for word in data:
buff.append(word.split(' '))
for word in buff:
temp = list()
for letter in word:
temp.append(dic.get(letter))
result.append("".join(temp))
result = " ".join(result)
print(result)
내 코드보다 정답코드가 훨씬 깔끔해서 비교해보게 되었다.
- 나는 split으로 나눈 결과를, 임시 리스트에 저장시키고 join으로 합치고 복잡하게 짰다. 임시리스트도 buff와 temp로 두개나 되었다. 하다보니 엑셀함수를 여러개 겹쳐쓸 때 처럼 복잡한 느낌이 들었다.
- 정답코드에서는 split으로 나눈 결과를 따로 임시 리스트에 저장하지 않았다.
split한 결과를 바로 for문에 사용했기 때문이다.
또, 공백도 단어가 끝날 때 직접 넣어주어 임시리스트가 하나도 필요하지 않았다.
#정답
dic = {
'.-':'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'
}
def morse(src):
result = []
for word in src.split(" "):
for char in word.split(" "):
result.append(dic[char])
result.append(" ")
return "".join(result)