<로직 고민>
- 어렵군..
- total을 num으로 나누면 몫이 result의 가운데 값이네
- 가운데값은 정해졌으니 num-1개가 가운데를 중심으로 대칭이군
- num이 짝수인 경우에는 가운데 값이 정수가 아니라 저기 포함되지 않고 그 값을 사이에 두는 정수가 가운데에서 왼쪽, 오른쪽에 위치하는군
- num이 2고 total이 2인 경우는...어떻게 구할 수 있지....음.....
- num이 3이고 total이 7인 경우는..? 4,5,6도 안 되고 5,6,7도 안 되는데...
- 왜 num개의 연속된 수를 더해서 total이 될 수 없는 케이스는 없다고 하는거지.....
- 뭐 여튼...num이 짝수일 경우와 홀수일 경우 나눠서 해야 하는 거 같긴 한데 일단 풀어보자
def solution(num, total):
answer = []
if num % 2 == 1:
center = total // num
start = center - ((num - 1)/2)
end = center+((num-1)/2)
for i in range(start, end+1):
answer.append(i)
else:
left = total // num
start = left - ((num - 1)/2)
end = left + ((num - 1)/2) + 1
for i in range(start, end+1):
answer.append(i)
return answer
- 이렇게 하니까 start인지 end인지가 float 형식이라 for문에서 에러가 뜬다
- num이 홀수일 때는 num-1은 짝수니까 항상 몫이 나누어 떨어질 거라 생각해서 그냥 /를 붙였는데 생각해보니 num이 짝수일 때는 num - 1이 홀수가 돼서 실수의 값이 나오는구나
- 하고 else문 아래에만 /을 //로 고쳤는데 여전히 같은 에러가 뜬다
- 에러가 몇 번째 줄에 있는지 자세히 보지 않았는데 처음부터 num이 홀수일 경우에서부터 걸렸다
- 그냥 나누기 연산자(/)를 쓰면 몫이 딱 떨어지더라도 그 값은 실수 형태인 것 같다..아마도..? 그러니 안 되지....?
- 나누기 연산자(/)를 다 몫 연산자(//)로 바꿨다
- 실행은 했는데 원하는 값이 아니다
- range()함수에 끝번호는 끝번호-1인가보다 range함수 정리했었는데 그새 까먹었다
- end+1로 고쳐주고 실행했더니 원하는 값이 나왔다
<완성된 코드>
def solution(num, total):
answer = []
if num % 2 == 1:
center = total // num
start = center - ((num - 1)//2)
end = center+((num-1)//2)
for i in range(start, end+1):
answer.append(i)
else:
left = total // num
start = left - ((num - 1)//2)
end = left + ((num - 1)//2) + 1
for i in range(start, end+1):
answer.append(i)
return answer
print(solution(3, 12)) # [3, 4, 5]
print(solution(5, 15)) # [1, 2, 3, 4, 5]
print(solution(4, 14)) # [2, 3, 4, 5]
print(solution(5, 5)) # [-1, 0, 1, 2, 3]
<다른 사람 풀이>
- 천재풀이1
def solution(num, total):
return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
- 이런 생각은 어디서 나오는 거지....?
- 역시 수학적인 머리가 부족해서 난 이런 생각을 못 하는건가
- 근데 사실......이해도 안 간다 ㅋㅋㅋㅋ
- 이거 말고도 다른 풀이들 보는데 머리가 아프다
- 심지어 내가 짠 것도 나중에 다시 보면 이게 뭐야...? 할 것 같다....
- 아니 그래도 나는 변수명도 잘 설정해서 처음 봐도 나중에 봐도 대충 무슨 얘긴지 알 수 있을 거 같다 ㅋㅋ