python_코드카타(2024.02.16)

김수경·2024년 2월 16일

코드카타

목록 보기
27/29

22. 두 정수의 합

문제

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

👩🏻‍💻 my coding

처음엔 a, b 중간의 값들을 어떻게 빼야하는지 계속 골머리를 앓았다.
a, b 사이에 정수가 여러개면 어째야 하지 고민하다보니 리스트에 넣어서 모두 더하기로.

def solution(a, b):
    if a != b:
        n = abs(a - b)
        num = min(a, b)
        x = []
        for i in range(n + 1):
            num = num + i 
            x.append(num)
        return sum(x)
    else:
        return a

그런데 함수를 작동해보니 테스트케이스가 틀린다.
노트에 하나씩 써봐도 왜 틀린지를 모르겠다.
gpt 해보니

def solution(a, b):
    if a != b:
        n = abs(a - b)
        num = min(a, b)
        x = []
        for i in range(n + 1):
            num = num 
            x.append(num + i)
        return sum(x)
    else:
        return a

리스트에 직접 +i 를 해준다.
어떻게 다른지 물어봐도 지피티도 계속 같은 함수라는 말만 한다.
튜터님에게 물어봐야겠다.

아대박 😇 멍청한게 여기서 드러나네
함수하면 if, for을 써야하겠다는 댕초보의 강박관념...
쉽게! 생각하면 된다고 하시며 알려줌

def solution(a, b) : 
    start_value = min(a, b)
    final_value = max(a, b)
    return sum(range(start_value, final_value+1))

한번만 보고도 코드를 쳤다.
등차수열을 이용하는게 가장 빠르다고 하셨지만 어차피 내가 응용을 못할 것 같아서 패스했다.
상단에 내가 틀린 반복문은 num이 계속 자라나는 형태라는데, 크게 중요하진 않은듯

정말 아차싶었던 이번 문제였다.
혼자풀지말고 쉽게 풀어가는 길을 찾아야겠다.


22. 콜라츠 추측

문제

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.

  1. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

👩🏻‍💻 my coding

def solution(num) : 
    count = 0
    for _ in range(500) : 
        if num == 1 : 
            return count 
        if num % 2 == 0 : 
            num  = num // 2
        elif num % 2 != 0 : 
            num  = num * 3 + 1
        count = count + 1 
    return -1 

여기서는 순서가 중요하다.
1인지 아닌지 먼저 판별하고 그 뒤에 홀짝여부 판별 뒤 카운트를 해준다.

profile
잘 하고 있는겨?

0개의 댓글