네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight"234567 → "23four5six7"10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
입출력 예 설명 입출력 예 #1 문제 예시와 같습니다. 입출력 예 #2 문제 예시와 같습니다. 입출력 예 #3 "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다. 입출력 예 #4 s에는 영단어로 바뀐 부분이 없습니다.
2. 문제 해석
s: 일부 자리수를 문자열로 변경 or 그대로인 문자열
대응하는 영단어-> dic 형태로 구성하기
ex) "one4seveneight"
'''
3. 문제 풀이
숫자와 문자를 구분하고, 해당 문자에 해당하는 숫자로 바꾼 뒤 이들을 원래 숫자로 반환하면 된다.
주어진 문자열을 하나씩 확인하면서 숫자인지, 문자인지 확인하고 문자일 경우 tmp 임시 공간에 저장한다.
그 다음 반복문을 계속해가면서 tmp에 저장된 문자들이 대응되는 영단어가 있을 경우 해당 문자를 숫자로 변환한다.
동시에 tmp를 비우고 반복문을 이어간다.
1. 문자열을 처음부터 for 문으로 돌기 - 애초에 문자열이기 때문에 숫자로 형변환 가능한지에 따라 구분 2. 숫자가 나오기 전 까지의 문자열을 리스트에 담기 => X -> 10203 → "1zerotwozero3" 2.계속 tmp 내의 문자들을 합쳐보고 그 값이 num_list에 있는지 확인
3. 담은 리스트를 문자로 합치기 4. 합친 문자열을 dic에서 찾아 tmp_ans 배열에 넣기
풀이 (1) 100/100
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}
nums =['0','1','2','3','4','5','6','7','8','9']
num_keys = list(num_dic.keys())
tmp = []
answer = []
for i in s:
if i in nums:
answer.append(str(i))
elif i not in nums and len(tmp) == 0:
tmp.append(i)
else:
tmp.append(i)
if ''.join(tmp) in num_keys:
answer.append(str(int(num_dic[''.join(tmp)])))
tmp = []
answer = int(''.join(answer))
return answer
테스트 1 〉
통과 (0.04ms, 10.4MB)
테스트 2 〉
통과 (0.02ms, 10.4MB)
테스트 3 〉
통과 (0.04ms, 10.4MB)
테스트 4 〉
통과 (0.03ms, 10.4MB)
테스트 5 〉
통과 (0.04ms, 10.4MB)
테스트 6 〉
통과 (0.04ms, 10.4MB)
테스트 7 〉
통과 (0.05ms, 10.5MB)
테스트 8 〉
통과 (0.04ms, 10.3MB)
테스트 9 〉
통과 (0.05ms, 10.4MB)
테스트 10 〉
통과 (0.02ms, 10.4MB)
5. 주요 코드 및 정리
처음에는 10203 → "1zerotwozero3"
해당 케이스를 확인하지 못해 문자로 변환된 값들이 연속으로 나오는 것을 인지하지 못했다.
그래서 기본 테스트 케이스 오류가 발생했다.
5.1 딕셔너리 자료형: key 값들만 list로 반환하기
num_keys = list(num_dic.keys())
5.2 리스트를 문자열로 합치기
''.join(tmp)
주의해야할 점은 합칠 리스트에 있는 값들이 모두 string 형의 데이터타입이어야 한다.
리스트에 int형으로 그대로 들어있을 경우 다음과 같은 오류가 발생한다.
TypeError: sequence item 0: expected str instance, int found
추가적으로 여유가 생기면 내가 푼 것만 작성하는게 아니라 chatgpt를 활용하거나 다른 사람들의 풀이 코드도 확인해볼 예정이다.