가끔 생각을 해요 ʕتʔ

📌 오늘 나온 비기너 문제를 풀었는데 허무해서 이전에 나왔던 문제를 풀었다.
그리고 미들러 문제도 오늘부터 함께 풀어야겠다!

 

🍒 프로그래머스 - 숫자 문자열과 영단어

문제

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

 

  • 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로 주어집니다.
  • 입출력 예
s result
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 

풀이

def solution(s):
    number_dict = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"}
    answer = ""
    temp = ""
    for char in s:
        if char.isdigit():
            answer += char
        else:
            temp += char
            if temp in number_dict:
                answer += number_dict[temp]
                temp = ""
    return int(answer)

# 문자열을 순회하면서 char이 숫자로 이루어져있다면 answer에 추가
# 그렇지 않다면 temp에 해당 문자열 추가
# temp가 number_dict의 요소인지 확인 후 맞다면 answer에 해당 요소의 value 추가, temp는 비우기

다른 사람의 풀이

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)

 

🍒 프로그래머스 - 서울에서 김서방 찾기

문제

String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

 

  • 제한사항
    seoul은 길이 1 이상, 1000 이하인 배열입니다.
    seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
    "Kim"은 반드시 seoul 안에 포함되어 있습니다.
  • 입출력 예
seoul return
["Jane", "Kim"] "김서방은 1에 있다"

 

풀이

def solution(seoul):
    answer = 0
    for i in seoul:
        if i == "Kim":
            answer = seoul.index(i)
    return f'김서방은 {answer}에 있다'

# seoul 배열을 순회하면서 Kim과 같은 요소
# Kim과 같다면 해당 요소의 인덱스를 answer에 담기

다른 사람의 풀이

def findKim(seoul):
    return "김서방은 {}에 있다".format(seoul.index('Kim'))

 

🍒 TIL

 

  • 나는 주어진 문자열을 순회하면서 숫자인 경우 바로 answer에 추가하고 그렇지 않다면 단어를 만들어서 answer에 추가했는데, 다른 사람의 풀이에서는 for 루프로 딕셔너리의 항목을 순회하면서 주어진 문자열에 있는 key를 value로 replace하는 방법이 있었다.
    딕셔너리의 항목을 순회하는 방법은 익혀두어야겠다. replace도 잘 활용하도록 해야겠다.
  • 나는 for을 사용해서 배열을 순회하면서 'Kim'과 같은 요소를 찾은 뒤 해당 인덱스를 구했는데, 다른 사람의 풀이를 보니 'Kim'에 해당되는 요소의 인덱스를 바로 return 했다. 즉 for을 사용할 필요가 없었던 것..!😱
    내가 작성하는 코드가 원하는 결과를 도출하기 위해 과연 필요한 부분인지 확인하는 습관을 가져야겠다.

공유하기

facebook twitter kakaoTalk kakaostory naver band