문제
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
처음엔 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이 계속 자라나는 형태라는데, 크게 중요하진 않은듯
정말 아차싶었던 이번 문제였다.
혼자풀지말고 쉽게 풀어가는 길을 찾아야겠다.
문제
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
- 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.
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인지 아닌지 먼저 판별하고 그 뒤에 홀짝여부 판별 뒤 카운트를 해준다.