본문 바로가기
알고리즘 풀이

[알고리즘] 프로그래머스 | K번째 수, 숫자 문자열과 영단어

by 째깍단 2023. 8. 7.

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개 빼고 모두 실패한다

왤까🤨?