level 1. 약수의 합

|

level 1. 약수의 합

출처

문제

어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다.

풀이 (python)

def sumDivisor(num):
    divisors = [num]
    t_num = int(num / 2)
    while t_num >=1:
        if num % t_num == 0:
            divisors.append(t_num)
        t_num -= 1
    return sum(divisors)

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumDivisor(12))

다른사람 풀이

def sumDivisor(num):
    return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])

배운점

  • sum() 함수를 통해 배열의 모든 요소를 더할 수 있다.

level 1. 가운데 글자 가져오기

|

level 1. 가운데 글자 가져오기

출처

문제

getMiddle메소드는 하나의 단어를 입력 받습니다. 단어를 입력 받아서 가운데 글자를 반환하도록 getMiddle메소드를 만들어 보세요. 단어의 길이가 짝수일경우 가운데 두글자를 반환하면 됩니다. 예를들어 입력받은 단어가 power이라면 w를 반환하면 되고, 입력받은 단어가 test라면 es를 반환하면 됩니다.

풀이 1 (python)

def string_middle(str):
    if len(str) % 2:
        return str[len(str) // 2]
    else:
        return str[(len(str) // 2) -1 : len(str) // 2 + 1]

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(string_middle("power"))

풀이 2 (python) - 3항 연산자 활용

def string_middle(str):
    t = len(str) // 2
    return str[t] if len(str) % 2 else str[t -1 : t + 1]

배운점

  • 슬라이싱 [처음 : 끝] 에서 에 해당하는 인덱스 값은 포함되지 않는다.
    (처음 <= 원하는 값 < 끝)
  • python의 3항 연산자: a if test else b (test 가 참이면 a 거짓이면 b 반환)

level 1. 최솟값 만들기

|

level 1. 최솟값 만들기

출처

문제

자연수로 이루어진 길이가 같은 수열 A,B가 있습니다. 최솟값 만들기는 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱한 값을 누적하여 더합니다. 이러한 과정을 수열의 길이만큼 반복하여 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다.

예를 들어 A = [1, 2] , B = [3, 4] 라면

  1. A에서 1, B에서 4를 뽑아 곱하여 더합니다.
  2. A에서 2, B에서 3을 뽑아 곱하여 더합니다.

수열의 길이만큼 반복하여 최솟값 10을 얻을 수 있으며, 이 10이 최솟값이 됩니다. 수열 A,B가 주어질 때, 최솟값을 반환해주는 getMinSum 함수를 완성하세요.

풀이 (python)

def getMinSum(A,B):
    A = sorted(A)
    B = sorted(B)
    B.reverse()
    return sum([a * b for a, b in list(zip(A, B))])

#아래 코드는 출력을 위한 테스트 코드입니다.

print(getMinSum([1,2],[3,4]))

다른사람 풀이

def getMinSum(A, B):
    return sum([a * b for a, b in zip(sorted(A), sorted(B, reverse=True))])

배운점

  • sorted(B, reverse=True) 를 통해서 B를 내림차순으로 정렬할 수 있다.
  • zip() 함수 : zip(iterable*)은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.
>>> list(zip([1, 2, 3], [4, 5, 6]))  
# [(1, 4), (2, 5), (3, 6)]
>>> list(zip("abc", "def"))
# [('a', 'd'), ('b', 'e'), ('c', 'f')]

level 1. 최대공약수와 최소공배수 - gcd

|

level 1. 최대공약수와 최소공배수 - gcd

출처

문제

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

풀이 (python)

1

from fractions import gcd
def gcdlcm(a, b):
    return [gcd(a,b), a*b/gcd(a,b)]


# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(gcdlcm(3,12))

2 (참고)

def gcdlcm(a, b):
    big, small = max(a, b), min(a, b)
    while small > 0:
        big, small = small, big % small
    return [big, int((a*b)/big)]

다른사람 풀이

def gcdlcm(a, b):
    c, d = max(a, b), min(a, b)
    t = 1
    while t > 0:
        t = c % d
        c, d = d, t
    answer = [c, int(a*b/c)]

    return answer

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(gcdlcm(3,12))

배운점

  • from fractions import gcd 모듈을 통해 최대공약수(Greatest Common Divisor) 를 구하는 함수 gcd()를 사용할 수 있다.
  • a,b의 최소공배수는 a*b/최대공약수 를 통해서 구할 수 있다.

level 1. 피보나치 수

|

level 1. 피보나치 수

출처

문제

피보나치 수는 F(0) = 0, F(1) = 1일 때, 2 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 점화식입니다. 2 이상의 n이 입력되었을 때, fibonacci 함수를 제작하여 n번째 피보나치 수를 반환해 주세요. 예를 들어 n = 3이라면 2를 반환해주면 됩니다.

풀이 (python)

def fibonacci(num):
    l = []
    a, b = 0, 1
    while len(l) != num+1:
        l.append(a)
        a, b = b, a+b
    return l[-1]

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(fibonacci(3))

다른사람 풀이

def fibonacci(num):
    a, b = 0, 1
    for i in range(num):
        a, b = b, a+b
    return a

배운점

  • a, b = 0, 1 같이 2개의 변수에 값을 한꺼번에 담을 수 있다.