오류 및 알고리즘정리본

#10 프로그래머스 영어가 싫어요/이진수더하기/숫자찾기/369게임/저주의숫자3

츄98 2023. 4. 26. 21:49

1. 영어가 싫어요

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.

 

# 영어가 싫어요
def solution(numbers):
    numbers = numbers.replace("one","1")
    numbers = numbers.replace("two","2")
    numbers = numbers.replace("three","3")
    numbers = numbers.replace("four","4")
    numbers = numbers.replace("five","5")
    numbers = numbers.replace("six","6")
    numbers = numbers.replace("seven","7")
    numbers = numbers.replace("eight","8")
    numbers = numbers.replace("nine","9")
    numbers = numbers.replace("zero","0")
    return int(numbers)

def solution(numbers):
    d = {'zero':'0','one':'1','two':'2','three':'3','four':'4',
         'five':'5','six':'6','seven':'7','eight':'8','nine':'9'}
    for k,v in d.items():
        numbers = numbers.replace(k,v)
    return int(numbers)

# 다른풀이
import re
array = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
array2 = ['0','1','2','3','4','5','6','7','8','9','0']

def solution(numbers):
    for i in range(len(array)):
        numbers = re.sub(array[i], array2[i], numbers)
    return int(numbers)

 

 

2. 이진수 더하기

이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.

 

# 이진수 더하기
def solution(bin1, bin2):
    answer = int(bin1,2)+int(bin2,2)
    # int(number,2): 이진수 number를 십진수로
    return str(bin(answer))[2:] 
    # bin() 십진수를 이진수로
    # 변환하면 0b가 앞에 붙으므로 0b를 제거하고 return한다.

def solution(bin1, bin2):
    return format(int(bin1,2) + int (bin2,2), 'b')
    # format(number, 'b')하면 number를 이진수로

 

 

3. 숫자 찾기

정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

 

# 숫자 찾기
def solution(num, k):
    strnum = str(num)
    result = strnum.find(str(k))
    if result == -1:
        return result
    else:
        return result + 1

# 다른 풀이
def solution(num, k):
    return -1 if str(k) not in str(num) else str(num).find(str(k)) + 1

def solution(num, k):
    for i, n in enumerate(str(num)):
        if str(k) == n:
            return i + 1
    return -1

def solution(num, k):
    try:
        return str(num).index(str(k)) + 1
    except ValueError:
        return -1

 

 

4. 369게임

머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.

 

def solution(order):
    listorder = list(str(order))
    return listorder.count("3") + listorder.count("6") + listorder.count("9")

def solution(order):
    return sum(map(lambda x: str(order).count(str(x)), [3, 6, 9]))

def solution(order):
    answer = len([1 for ch in str(order) if ch in "369"])
    return answer

def solution(order):
    answer = 0
    for i in str(order):
        if int(i)!=0 and int(i)%3==0:
            answer+=1
    return answer

 

 

5. 저주의 숫자 3

 

# 저주의 숫자 3

def solution(n):
    answer = 0
    for i in range(n):
        answer +=1
        while answer %3 == 0 or '3' in str(answer):
            answer +=1
    return answer