본문 바로가기
알고리즘

숫자 문자열과 영단어[2021 KAKAO BLIND]

by 우보틀 2021. 11. 20.

https://programmers.co.kr/learn/courses/30/lessons/81301

 

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

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

programmers.co.kr

 

레벨 1짜리 문제다. 

너무 어렵게 접근을 했었다. 다른 사람들의 답변을 보고 파이썬에 아직 익숙하지 않구나 하는걸 느꼈다. 

내가 제출한 코드를 먼저 보자

 

def solution(s):
    answer = 0
    hash_list = {"zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9}
    filtered = list(filter(lambda x : x != '',re.split('(\d)', s)))
    answer = []
    for i in filtered :
        if len(i) >= 6 :
            temp_str = i
            index = 3
            while len(temp_str) != 0 :
                if temp_str[:index] in hash_list:
                    answer.append(str(hash_list[temp_str[:index]]))
                    temp_str = temp_str[index:]
                    index = 3
                else :
                    index += 1

        elif len(i) >= 3 :
            answer.append(str(hash_list[i]))
        else :
            answer.append(i)
    return ''.join(answer)

 

접근 방식

  1. dictonary를 하나 선언하고 그 안에 값을 넣어두었다. 
  2. 영어단어의 최소 길이가 3이라는 것에서 접근 방식을 찾았었다. 
  3. 정규표현식 라이브러리로 단어들을 자르고 하나씩 접근하면서 dict에 있는지 찾는다.
  4. 만약 dict내에 존재하지 않으면 자르는 길이를 하나씩 늘려가면서 다시 3번의 과정을 진행한다.

 

개선할 점 

  1. dict내에 value값을 string으로 선언했으면 불필요하게 str로 매번 바꾸는 과정을 하지 않아도 되었다.
  2. 방식 자체가 너무 어렵게 접근했다.

아래는 바람직한 코드

def solution(s):
    num_dic = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
               "five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"}
    for key, value in num_dic.items():
        s = s.replace(key, value)
    return int(s)

 

1. 10번의 연산이면 끝난다...

 

 

알게된 점

1. string의 replace 메소드는 string내부에 일치하는 모든 값을 치환해준다 oneone => 00

2. num_dic.items()로 iterator를 가져올 수 있다. dictonary 메소드들 한번 정리하자

'알고리즘' 카테고리의 다른 글

스택 수열[백준 1874]  (0) 2021.11.20
프린터 큐[백준 1966]  (0) 2021.11.20
치킨 튀기기[제로베이스]  (0) 2021.11.14
기둥과 보 설치[2020 KAKAO BlIND RECRUITMENT]  (0) 2021.11.14
나 잡아 봐라[2019 LINE 인턴채용]  (0) 2021.11.14