코딩테스트/programmers (python)

python/ Lv.0 소인수분해, 구슬을 나누는 경우의 수, 컨트롤 제트

seulll 2023. 1. 17. 01:15

코딩테스트 연습 - 소인수분해 | 프로그래머스 스쿨 (programmers.co.kr)

 

문제 설명

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

입출력 예

n result
12 [2, 3]
17 [17]
420 [2, 3, 5, 7]

 

풀이

def solution(n):
    num=[]
    result=[]
    i=2
    
    while i<=n:
        if n%i==0:
            num.append(i)
            n=n//i
        else:
            i+=1
        
    for i in num:
        if i not in result:
            result.append(i)
    return result

코딩테스트 연습 - 구슬을 나누는 경우의 수 | 프로그래머스 스쿨 (programmers.co.kr)

내 풀이 (정답)

def solution(balls, share):
    bm=1
    bj1=1
    bj2=1
    for i in range(1, balls+1):
        bm*=i
    for j in range(1, (balls-share)+1):
        bj1*=j        
    for h in range(1, share+1):
        bj2*=h
        
    return bm/(bj1*bj2)

 

풀이

1. ( 내 풀이를 팩토리얼 함수를 만들어 정리)

def solution(balls, share):
    answer = factorial(balls) / (factorial(balls - share) * factorial(share))
    return answer

def factorial(n):
    result = 1
    for i in range(1, n + 1):
        result = result * i
    return result

 

2. 조합 함수 사용

import math

def solution(balls, share):
    return math.comb(balls, share)

ex)

로또의 경우의 수는 45개에서 6개를 뽑는 것이므로

from math import comb
print(comb(45,6))

 

 


코딩테스트 연습 - 컨트롤 제트 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

 

입출력 예

s result
"1 2 Z 3" 4
"10 20 30 40" 100
"10 Z 20 Z 1" 1
"10 Z 20 Z" 0
"-1 -2 -3 Z" -3

 

내 풀이 

.

 

풀이

def solution(s):
    answer=0
    num=s.split()
    for i in range(len(num)):
        if num[i] !="Z":
            answer+= int(num[i])
        else:
            answer-= int(num[i-1])
    return answer