네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
숫자영단어
0 | zero |
1 | one |
2 | two |
3 | three |
4 | four |
5 | five |
6 | six |
7 | seven |
8 | eight |
9 | nine |
제한사항
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
입출력 예
sresult
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
입출력 예 설명
입출력 예 #1
- 문제 예시와 같습니다.
입출력 예 #2
- 문제 예시와 같습니다.
입출력 예 #3
- "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
- 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.
입출력 예 #4
- s에는 영단어로 바뀐 부분이 없습니다.
def solution(s):
word = {'zero':0, 'one':1, 'two':2, 'three':3, 'four':4, 'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9}
answer = ''
temp = ''
for i in range(len(s)):
if s[i].isdigit():
answer += s[i]
else:
if(s[i] not in word):
temp += s[i]
if(temp in word):
answer += str(word[temp])
temp = ''
return int(answer)
word = {'zero':0, 'one':1, 'two':2, 'three':3, 'four':4, 'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9}
입력받은 문자열에서 영어 알파벳에 대응하는 숫자를 딕셔너리 형태로 저장함.
answer = ""
temp = '""
for i in range(len(s)):
if s[i].isdigit():
answer += s[i]
입력받은 문자열을 차례로 보면서 숫자가 나오면 answer에 추가함.
※ isdigit
isdigit은 string클래스에 있는 메서드이다.
str.isdigit()형태로 사용함.
문자열이 숫자로만 이루어져 있으면 true반환/ 문자가 단 하나라도 있으면 false반환.
- str.isdigit("판단하고자 하는 문자열")
- "판단하고자 하는 문자열".isdigit()
두가지 형태로 사용 가능하다. 이 함수는 음수(-)나 소수점(.)은 숫자가 아닌 문자로 판단하기 때문에 실수나 음수는 판단하지 못한다. 즉, '0이상인 정수'로만 이루어진 문자열에서만 true를 반환한다.
else:
if(s[i] not in word):
temp += s[i]
if(temp in word):
answer += str(word[temp])
temp = '""
숫자가 아닌 문자가 나오면 temp라는 문자열에 해당 문자를 추가하고, word에 해당하는 단어가 되면 answer에 추가함. 그리고 중복을 없애기 위해 temp를 다시 빈 문자열로 만들어준다.
예를들어 temp에 o, n, e가 차례로 추가되어 one이라는 단어가 되면 temp in word가 true가 되어 if문이 실행됨.
word[temp] = 0이므로 answer에 0추가 한 후 temp를 비움.
return int(answer)
answer는 str형이기 때문에 "1478", "234567"과 같은 형태로 출력됨. 기댓값은 int형이기 때문에 int형으로 바꿔서 return함.
<간단한 방법>
word = {'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 word.items():
answer = answer.replace(key, value)
return int(answer)
※딕셔너리 keys(), values(), items()
keys() - 딕셔너리의 키들을 리턴
values() - 딕셔너리의 값들을 리턴
items() - 딕셔너리의 키와 값 쌍을 리턴
dic = {'a':0, 'b':1, 'c':2}
print(dic.keys())
print(dic.values())
print(dic.items())
dict_keys(['a', 'b', 'c'])
dict_values([0, 1, 2])
dict_items([('a', 0), ('b', 1), ('c', 2)])
※replace()
문자열.replace("변경하고 싶은 문자/문자열", "변경될 문자", 횟수)
*횟수 : 지정한 횟수만큼만 변경. 지정하지 않으면 모두 변경
변경하고 싶은 문자가 문자열 안에 여러번 등장하는 경우, 변경 횟수를 지정하면 앞에서부터 찾은 n개가 변경됨.
string = "ABCdeF"
print(string.replace('de', 'DE'))
ABCDEF
'[프로그래머스] > python' 카테고리의 다른 글
[프로그래머스]2021 kakao blind recruitment>신규 아이디 추천 (0) | 2023.07.08 |
---|---|
[프로그래머스]2021Dev-Matching>로또의 최고순위와 최저순위 (0) | 2023.07.08 |
[프로그래머스]2020카카오 인턴십>키패드 누르기 (0) | 2023.07.06 |
[프로그래머스]2019카카오 겨울 인턴십>크레인 인형뽑기 게임 (0) | 2023.07.04 |
[프로그래머스] 2018kakao blind recruitment>[1차]비밀지도 (0) | 2023.07.01 |