본문 바로가기

공부기록/Python

점프투파이썬 종합문제 Q16 모스부호 해독 Morse code decoder

#내코드
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)