Development Project

[ Programmers - 06/26 ] - 숫자 문자열과 영단어(Python)_Level1 본문

CodingTest/Programmers

[ Programmers - 06/26 ] - 숫자 문자열과 영단어(Python)_Level1

나를 위한 시간 2022. 6. 26. 15:38
  • 문제링크

https://programmers.co.kr/learn/courses/30/lessons/81301?language=python3 

 

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

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

programmers.co.kr

 

 

 

  • 문제

 

 

 

  • 시행착오

zero를 빼먹어서 런타임에러가 생긴 것 말고는 시행착오는 없었다. 문제를 항상 잘 읽어야지 하는데 계속 차분히 문제를 보는 습관을 길러야겠다.

 

 

 

  • 문제분석

s : 영어와 숫자가 혼합된 문자열

을 입력받아, 영어에 대응되는 숫자로 변경하는 프로그램을 작성하는 문제이다. 각 영어로된 숫자단어를 발견하면 치환하는 방식으로 계산하면 된다.

 

 

 

  • 각 파라미터의 유형

s = "one4seveneight"

<조건> 

→  1 ≤ s의 길이 ≤ 50

→  s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않음

→  return 값이 1이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어짐

=> 영어와 숫자가 혼합된 문자열이며, 각 영단어들이 겹쳤을때 다른 숫자로 착각할 수 있는 배열의 조합은 없다고 보여진다.

 

 

 

  • 문제접근

※ 작성자가 문제를 보고 든 생각을 차례대로 써본 것이다. 이 순번은 정답이 아니며 매번 다른 생각을 해보길 권장한다.

 

1) 우선 컴퓨터는 1이 "one"이고 2가 "two" 등등 이런 것들을 모르므로 이를 리스트로 담아주었다. 딕셔너리로 key를 숫자 value를 영단어로 하는것도 한 방법이지만, 리스트는 값을 더 넣지않고도 인덱스로 구분이 가능하니 더 간단할거라 생각하였다.

l=["one","two","three","four","five","six","seven","eight","nine"]

 

2) 전 포스팅에서도 사용했던 것 처럼 각 문자열이 포함되면 치환하도록 코딩하는 것은 반복문과 in을 사용하면 가능하다.

for i in l:   #l은 위에 코딩한 변수 l과 동일하다
    while i in s:
        s = s.replace(i,str(l.index(i)))

 

 

 

  • 최종코드
def solution(s):
    l=["zero","one","two","three","four","five","six","seven","eight","nine"]
    for i in l:
        while i in s:
            s = s.replace(i,str(l.index(i)))
    return int(s)
Comments