주소:
https://school.programmers.co.kr/learn/courses/30/lessons/81301
문제:
Neo와 Frodo는 숫자 게임을 하고 있습니다.
Neo가 Frodo에게 번호를 알려주면 일부 숫자가 영어 단어로 변환된 카드를 주고 Frodo는 원래 번호를 찾습니다.
다음은 숫자의 일부 자리를 영어 단어로 바꾸는 예입니다.
- 1478 → “1478”
- 234567 → “23four5six7”
- 10203 → “1제로투제로3”
이와 같이 숫자의 일부 자리가 영문이나 문자열로 변경되어 그대로 유지됩니다.
s는 매개변수로 지정됩니다.
풀기 함수를 완성하여 s를 의미하는 원래 숫자를 반환하십시오.
참고로 각 숫자에 해당하는 영단어는 다음과 같다.
숫자 | 영어 단어 |
0 | 영 |
하나 | 하나 |
2 | 둘 |
삼 | 삼 |
4 | 네 |
5 | 다섯 |
6 | 육 |
7 | 세븐 |
8일 | 여덟 |
9 | 아홉 |
제한:
- 1 ≤ 길이 s ≤ 50
- s가 “0” 또는 “0”으로 시작하는 경우는 존재하지 않습니다.
- 반환 값이 1보다 크거나 같고 2,000,000,000보다 작거나 같은 정수인 경우에만 유효한 입력입니다.
s로 주어진다.
I/O 예시:
에스 | 결과 |
“원포세븐” | 1478 |
“23four5six7” | 234567 |
“2three45sixseven” | 234567 |
“123” | 123 |
I/O 예시 설명:
I/O 예제 #1
- 샘플 문제와 같습니다.
I/O 예제 #2
- 샘플 문제와 같습니다.
I/O 예제 #3
- 3은 3, 6은 6, 7은 7이므로 정답은 I/O 예제 #2와 마찬가지로 234567입니다.
- 다음과 같이 동일한 정답을 가리키는 문자열이 여러 개 있을 수 있습니다.
B. 입력/출력 예제 #2 및 #3.
I/O 예제 #4
- s에는 영단어 변화가 없습니다.
시간 제한 정보:
- 정확도 테스트: 10초
해결 방법:
def solution(s):
num = ("zero","one","two", "three","four","five","six","seven","eight","nine") #숫자를 문자로 담은 배열
line = ""
answer = ""
for i in s:
if i.isdigit(): #숫자면
answer += i #answer에 그대로 넣기
else: #숫자가 아니라면
line += i #line에 넣기
if line in num: #num의 배열 중 line이 있다면
answer += str(num.index(line)) #그 index값의 위치를 answer에 넣기
line = "" #line초기화
return int(answer) #str형태인 answer값을 int형으로 바꿔 반환
솔루션 프로세스:
인턴십 연계로 2021 코코아 채용 문제
어려운 문제는 아니었지만 풀기 어려웠던 것 같습니다.
다른 사람의 솔루션:
num_dic = {"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():
answer = answer.replace(key, value)
return int(answer)
정육면체 형태의 숫자 배열 만들기
루프 및 교체 기능을 사용하여 문자를 변경했습니다.
보기 쉽고 빠른 수정처럼 보입니다.
사전 대신 목록을 사용하고 루프에서 enumerate() 함수를 사용하면 좋을 것입니다.