5/27 미경이스터디

코변·2022년 5월 26일
0
post-thumbnail

Photo by Pietro Mattia on Unsplash

07:00 ~ 08:00

하샤드수

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

def solution(x):
    check = 0
    i = 4
    x_check = x
    while i >= 0:
        demical = (x // (10 **i))
        check += demical
        x -= demical * (10**i)
        i-=1
    return x_check % check == 0

각 자리수를 뽑아낼 수 있는지 묻는 문제라고 판단을 했다. 처음에는 문자열로 변환하여 하나씩 뽑아냈으나 그러면 이때까지 내가 해왔던 것과 마찬가지라고 생각해서 10의자리 숫자를 제곱형태로 나타내어 각 자리수를 뽑아 냈다. 그리고 조건을 잘 보고 제일 큰 숫자가 10000이어서 4자리수까지 한계를 두고 검사했다.

최대공약수와 최대공배수

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

def gcd(n, m):
    if n % m == 0:
        return m
    return gcd(m , n%m)
def solution(n,m):
    if n < m:
        n, m = m, n
    gcd_val = gcd(n, m)
    lcm_val = (n * m) // gcd_val
    return [gcd_val, lcm_val]

최대공약수를 gcd라는 재귀함수를 통해서 얻어냈고(유클리드 호제법)
두 숫자의 곱을 최대공약수로 나누면 최대공배수가 된다는 사실을 이용해서 최소공배수를 구했다.

그 밖의 푼 문제들
짝수와 홀수
직사각형 별찍기
핸드폰 번호 가리기

profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글