https://programmers.co.kr/learn/courses/30/lessons/81301
레벨 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)
접근 방식
- dictonary를 하나 선언하고 그 안에 값을 넣어두었다.
- 영어단어의 최소 길이가 3이라는 것에서 접근 방식을 찾았었다.
- 정규표현식 라이브러리로 단어들을 자르고 하나씩 접근하면서 dict에 있는지 찾는다.
- 만약 dict내에 존재하지 않으면 자르는 길이를 하나씩 늘려가면서 다시 3번의 과정을 진행한다.
개선할 점
- dict내에 value값을 string으로 선언했으면 불필요하게 str로 매번 바꾸는 과정을 하지 않아도 되었다.
- 방식 자체가 너무 어렵게 접근했다.
아래는 바람직한 코드
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 |