[Python] 코딩 도장 - 모스부호 해독

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 모스부호 해독] - Lv.2

문자열 형식으로 입력 받은 모스코드(dot: . dash:-)를 해독하여 영어 문장으로 출력하는 프로그램을 작성하시오.

글자와 글자 사이는 공백 하나, 단어와 단어 사이는 공백 두개로 구분한다.

예를 들어 다음 모스부호는 “he sleeps early”로 해석해야 한다.

.... .  ... .-.. . . .--. ...  . .- .-. .-.. -.--

모스부호 규칙 표

문자 부호 문자 부호
A .- N -.
B -… O
C -.-. P .–.
D -.. Q –.-
E . R .-.
F ..-. S
G –. T -
H …. U ..-
I .. V …-
J .— W .–
K -.- X -..-
L .-.. Y -.–
M Z –..

출처: https://codingdojang.com/scode/469?answer_mode=hide


[풀이]

mos_dict = {
    '.-': '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 mos():
    a = input().split(" ")
    c = ""
    for i in a:
        try:
            c += mos_dict[i]
        except:
            c += " "
    return print(c)

mos()
.... .  ... .-.. . . .--. ...  . .- .-. .-.. -.--
he sleeps early

모스부호 규칙 표를 사전 형태로 만들어 두어 입력한 모스부호에 따라 변환하였다.

글자와 글자 사이는 공백 하나이므로 split()에서 공백 하나를 사용하였다.

이 경우 공백 2개인 경우가 같이 분리되므로 변환 시 예외 처리로 공백을 더해주었다.

[추천 풀이]

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)


print(morse('.... .  ... .-.. . . .--. ...  . .- .-. .-.. -.--'))
HE SLEEPS EARLY 

이 분은 공백 2개인 경우와 한 개인 경우를 분리해서 for문 처리하는 방식을 사용했다.

Leave a comment