알고리즘 풀이
[알고리즘] 프로그래머스 | K번째 수, 숫자 문자열과 영단어
째깍단
2023. 8. 7. 10:39
K번째 수
답:
더보기
def solution(array, commands):
answer = []
for c in commands:
i = c[0] - 1
j = c[1]
k = c[2] - 1
a = array[i:j]
answer.append(sorted(a)[k])
return answer
짧게 줄여보았음!
def solution(array, commands):
answer = []
for c in commands:
i, j, k = c
answer.append(sorted(array[i-1:j])[k-1])
return answer
문제 분석 및 해석
1. i번째 숫자부터 j번째 숫자까지 자르고
2. 정렬했을 때,
3. k번째에 있는 수 구하기
풀이생각
commands에서 각 요소를 꺼내어 범위 연산자에 i, j를 넣기
정렬 및 k번째 수 지정, return
숫자 문자열과 영단어
답:
더보기
리스트로 풀이
number = ["zero", "one", "two", "three","four","five","six","seven", "eight", "nine"]
def solution(s):
for num in number:
if num in s:
i = number.index(num)
s = s.replace(num, str(i))
return int(s)
딕셔너리로 풀이
word ={"zero": "0", "one" : "1", "two" :"2", "three" : "3", "four" :"4", "five" :"5", "six" : "6", "seven" : "7","eight" : "8","nine" : "9"}
def solution(s):
for i in word:
s = s.replace(i, word[i])
return int(s)
문제 분석 및 해석
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
숫자의 일부 자릿수가 영단어, 혹은 바뀌지 않고 그대로인 문자열 s
s를 원래 숫자로 바꾸어 int형태로 return하기
>> 풀이생각
리스트 / 딕셔너리 둘다로 풀 수 있을 것이라고 생각했다.
일단 리스트로 도전 후 딕셔너리로 풀이했음
이후 range()로도 풀이를 해보았는데, 오류 발생으로 일단 중단.
오류1.
range(10)으로 풀어보려고하는 과정에서
string에서 int를 찾으려고 해서 오류남
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
TypeError: 'in <string>' requires string as left operand, not int
index = ["0", "1", "2", "3", "4", "5", "6", "7", "8", “9”]
로 변경
# 실패
number = ["zero", "one", "two", "three","four","five","six","seven", "eight", "nine"]
index = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
def solution(s):
answer = ""
for i in range(10): #0~9
if number[i] in s:
i_num = number.index(number[i])
answer += str(i_num)
if index[i] in s:
answer += index[i]
return int(answer)
테스트 케이스는 잘 통과하는데, 코드를 제출하면 1개 빼고 모두 실패한다
왤까🤨?