코드짜는 노인네

[프로그래머스] 숫자 문자열과 영단어 - 문제해결과정 본문

코딩 테스트

[프로그래머스] 숫자 문자열과 영단어 - 문제해결과정

ikohong 2022. 8. 27. 04:01
728x90
반응형

[프로그래머스] 숫자 문자열과 영단어 - 문제해결과정


문제 : 영어를 숫자로 바꿔라
EX> 'one4seveneight' → 1478

나의 문제 해결 과정 (에러과정)

일단 문제를 딱 보았을때, 아직 초보다 보니깐 뭘 해야될지 모르겠다는 생각을 했다. 일단 어떤 문자열을 찾으면 숫자로 바꾸기 위한 데이터가 필요하다는 생각에 파이썬의 'dictionary(딕셔너리)'함수를 먼저 작성을 했습니다.

# dict 구조
strToNum = {'zero':0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9}

이렇게 작성을 하고 나서 '문자열'을 보며 곰곰히 생각을 해보았을때, '문자열을 잘라야겠다!'는 생각이 들어, 'index'함수를 사용하여 숫자가 아닌 문자로 적혀있는 부분의 시작위치를 찾아보기로 하였습니다.

s = "one4seveneight"
# 문자열 중 영단어에 해당하는 부분의 위치를 'index_arr'배열에 추가
index_arr = []

for i in strToNum:
    # index함수를 이용하여 문자열을 찾을때 없으면 error가 발생하므로, try, except를 이용해 예외처리
    try:
    	index_arr.append([s.index(i), s.index(i)+len(i)])
         # 영단에의 끝 인덱스 확인을 위해 시작 index에서 문자열 길이를 더해 끝 index 위치 확인
    except:
    	pass
        
# 결과 : [[0, 3], [4, 9], [9, 14]]

해당 문자열의 인덱스를 찾았으니, 해당문자열의 위치에 'dictionary(딕셔너리)'함수를 이용하여 영단어를 숫자로 바꿔야겠다는 생각을 했습니다. 그래서 'replace'함수를 이용하기로 했습니다. 그런데 'replace'함수를 이용할려고 보니, 굳히 'index'함수를 이용해서 위치를 찾을 필요없이, 'for'문을 이용해서 'strToNum'의 dictionary에 키값을 불러와 해당 키값이 있다면, 'strToNum'의 value값으로 바꾸면 되겠다고 생각했습니다.

반응형
# answer에 s값을 대입 (id함수로 두 값을 보면 주소값이 같음을 참고)
answer = s

for i in strToNum:
    # 처음에는 에러가 발생할거 같아 예외처리를 했지만, 오류가 발생하지 않아서 그냥 작성
    answer = answer.replace(i,str(strToNum[i]))
    print(answer)

#결과 : 
14seveneight
14seveneight
14seveneight
14seveneight
14seveneight
14seveneight
147eight
1478
1478

'replace()'함수만 알고 있었다면 굉장히 간단한 문제였는데, 너무 어렵게 해결할려는 방법을 먼저 선택해서 코드를 작성하는데 시간이 좀 걸렸습니다. 계속 내장함수가 무엇이 있는지 파악하면서 쉽게 코드를 짤 수 있도록 연습을 해야겠네요;;;

최종 코드 결과물

def solution(s):
    strToNum = {'zero':0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9}  # dict 구조
    answer = s
    for i in strToNum:
        answer = answer.replace(i,str(strToNum[i]))
        
    return int(answer)
728x90
반응형
Comments