아는 만큼 보인다

[프로그래머스] 숫자 문자열과 영단어 python3 본문

알고리즘&자료구조/코딩테스트 연습

[프로그래머스] 숫자 문자열과 영단어 python3

계토 2022. 6. 11. 18:02

프로그래머스 숫자 문자열과 영단어 python3 문제 바로가기

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

이번 문제는 말도 안되게 복잡하게 생각해서 코드가 길어진 문제이자,

또 아직 python function에 대해 잘 모른다는 사실이 드러난..문제였다.

숫자와 문자가 섞인 string을 받았을 때, 나는 무식하게 하나씩 읽고 문자인지 숫자인지 판단하고 문자일 때에도 완전한 문자인지 또 확인하고 바꾸어주는 일을 manual 하게 구현했는데,,, replace function을 쓰면 간단하게 해결이 되는 것이었다..

내가 작성한 코드:

def solution(s):
    answer = []
    num_dict = {"zero":"0","one":"1", "two":"2", "three":"3",
               "four":"4", "five":"5", "six":"6", "seven":"7",
               "eight":"8", "nine":"9"}
    strs = list(num_dict.keys())
    nums = list(num_dict.values())
    
    # j가 3에서 시작하는 이유는, 문자열은 최소 3자리일 것이니까..! 
    i, j = 0, 3
    while i <= len(s)-1:
    	# 숫자라면, 바로 append
        if s[i] in nums:
            answer.append(s[i])
            i += 1
        # 숫자가 아니라면
        else:
        	# 일단 세글자까지 읽어본다
            candidate = s[i:i+j]
            # 세글자까지 읽었는데 완전한 문자열이었다면 바로 append
            if candidate in strs:
                answer.append(num_dict[candidate])
                # 이미 i+j까지는 읽었으니까 i에다가 j를 더함
                i += j
                # j는 다시 initialize
                j = 3
            # 세글자까지 읽었는데 완전한 문자열이 아니면 한글자 더읽기    
            else:
                j += 1
                
    # 합쳐주고 integer로 만들어주기
    answer = ''.join(answer)
    answer = int(answer)
            
   
    return answer

replace를 활용한 코드 (다른 사람들의 풀이를 참고함)

num_dict = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"}

def solution(s):
    answer = s
    for key, value in num_dic.items():
    	# replace로 바로 대체... ^^...
        answer = answer.replace(key, value)
    return int(answer)

헤헤.. 이렇게 배워가는거지..머 !