관리 메뉴

솜씨좋은장씨

[Programmers] 모스부호 (1) (Python) (feat.ChatGPT) 본문

Programming/코딩 1일 1문제

[Programmers] 모스부호 (1) (Python) (feat.ChatGPT)

솜씨좋은장씨 2023. 4. 18. 23:39
728x90
반응형

코딩 1일 1문제! 오늘의 문제는

그동안 문제를 제대로 읽지않고 저 이어져있는 모스부호를 어떻게 나눌까 고민하며 미루고 미루다 

각 모스부호 코드 마다 공백이 존재하는 것을 알고 풀어버린 모스부호 (1) 입니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

👨🏻‍💻 문제 풀이 - SOMJANG

1. 모스부호별 알파벳이 담긴 dictionary 를 하나 만들어 줍니다.

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'
}

2. 입력 받은 letter 를 공백 기준으로 split 한 다음 하나씩 꺼내어 해당 값을 key 값으로 1번에서 만든 dictionary 에서 value 를 꺼내어 리스트에 모아줍니다.

3. 마지막으로 해당 값을을 공백없이 join 해주면 끝!

answer = "".join([morse[code] for code in letter.split()])

 

👨🏻‍💻 코드 ( Solution ) - SOMJANG

def solution(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'
    }
    
    answer = "".join([morse[code] for code in letter.split()])
        
    
    return answer

👨🏻‍💻 ChatGPT 부탁해!

👨🏻‍💻 SOMJANG

오늘도 어김없이 ChatGPT 에게 풀어봐 달라고 해보았습니다.

당신은 Python3 로 코드를 작성할 줄 아는 실력있는 개발자입니다.

문제가 주어지면 해당 문제의 의미를 파악하고 Python3 로 해당 문제를 해결하는 코드를 작성합니다.

코드를 작성할때에는 설명이 필요한 부분에 주석으로 설명을 달아줍니다.

 

이제 문제를 드리겠습니다.

 

모스부호 (1)

문제 설명

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요. 모스부호는 다음과 같습니다.

 

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' }

 

제한사항
1 ≤ letter의 길이 ≤ 1,000

return값은 소문자입니다.

letter의 모스부호는 공백으로 나누어져 있습니다.

letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.

해독할 수 없는 편지는 주어지지 않습니다.

편지의 시작과 끝에는 공백이 없습니다.

입출력 예

letter result

".... . .-.. .-.. ---" "hello"

".--. -.-- - .... --- -." "python"

 

입출력 예 설명

입출력 예 #1

.... = h

. = e

.-.. = l

.-.. = l

--- = o

따라서 "hello"를 return 합니다.

 

입출력 예 #2

.--. = p

-.-- = y

- = t

.... = h

--- = o

-. = n

따라서 "python"을 return 합니다.

 

a ~ z에 해당하는 모스부호가 순서대로 담긴 배열입니다. {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}

💻 ChatGPT

해결 방법:

  1. 주어진 모스부호 사전을 이용하여 모스부호를 영어 소문자로 변환해주는 함수 decode_morse(morse_code)를 작성합니다.
  2. 입력된 문자열 letter를 공백으로 나누어진 모스부호 리스트 morse_code_list로 변환합니다.
  3. morse_code_list의 각 모스부호를 decode_morse() 함수를 이용하여 영어 소문자로 변환하고, 결과를 하나의 문자열 result로 연결하여 반환합니다.

구현:

def decode_morse(morse_code):
    """주어진 모스부호를 영어 소문자로 변환하는 함수"""
    morse_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'
    }
    return morse_dict[morse_code]

def solution(letter):
    morse_list = letter.split() # 입력된 문자열을 공백으로 나눈 모스부호 리스트
    result = '' # 영어 소문자로 변환된 결과 문자열
    for morse_code in morse_list:
        result += decode_morse(morse_code)
    return result

테스트:

assert solution(".... . .-.. .-.. ---") == "hello"
assert solution(".--. -.-- - .... --- -.") == "python"

해결방법부터 assert 를 활용하여 테스트 코드까지 작성해주는 점이 인상 깊었습니다.

 

읽어주셔서 감사합니다.

 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments