연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
1. 1 ≤ num ≤ 100
2. 0 ≤ total ≤ 1000
3. num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
| num | total | result |
|---|---|---|
| 3 | 12 | [3, 4, 5] |
| 5 | 15 | [1, 2, 3, 4, 5] |
| 4 | 14 | [2, 3, 4, 5] |
| 5 | 5 | [-1, 0, 1, 2, 3] |
입출력 예 #1
입출력 예 #2
입출력 예 #3
입출력 예 #4
def solution(num, total):
answer = []
if num%2 == 0:
#num의 개수가 짝수일때
a = ((total//(num//2))+1)/2
#중앙값 두개 중 더 큰 수 a
for x in range(a-num//2,a+num//2):
answer.append(x)
else:
#num의 개수가 홀수일때
a = total/num
#중앙값 a
for x in range(a-(num-1)//2,a+(num+1)//2):
answer.append(x)
return answer
위 코드의 경우 실행 시
TypeError: 'float' object cannot be interpreted as an integer 에러가 발생한다. 이유는 /의 경우 몫을 반환해주는 연산자로,
4/2 => 2.0000000 이런식의 float값을 반환한다.
따라서 a에 int를 붙여주거나 //연산자를 활용해 몫을 정수형태로 반환해 range인자 안에 넣어주어야 했다. (위의 오류는 결국 range의 인자안에 정수형태가 아닌 형태를 넣어서 발생했던 것 !)
def solution(num, total):
answer = []
if num%2 == 0:
#num의 개수가 짝수일때
a = ((total//(num//2))+1)//2
#중앙값 두개 중 더 큰 수 a
for x in range(a-num//2,a+num//2):
answer.append(x)
else:
#num의 개수가 홀수일때
a = total//num
#중앙값 a
for x in range(a-(num-1)//2,a+(num+1)//2):
answer.append(x)
return answer
def solution(num, total):
answer = []
a = 0
if num % 2 == 0:
a = int(total/num) - int(num/2 - 1)
answer = list(range(a,num+a))
else:
a = int(total/num) - int(num/2)
answer = list(range(a,num+a))
return answer
이 풀이법도 본질적으론 나와 같은 방식의 풀이 접근방식이었지만 세부적으론 list(range())문을 사용해 for와 append를 사용한 내 방식보다 조금 효율적인 것 같아 적어놓았다.
def solution(num, total):
b = total // num - (num - 1) // 2
return list(range(b, b + num))
이 정도의 짧은 풀이법도 가능하다. 수학적인 머리만 잘 돌아간다면 ...