본문 바로가기
알고리즘

[알고리즘 문제] 할로윈 사탕 (Python / 파이썬)

by yewonnie 2022. 5. 18.

문제

10월 31일은 할로윈 데이다.
엄마들은 6명의 아이들에게 사탕을 쥐어 주었다. 아이들은 원형 식탁에 앉아서 사탕을 먹는데 아이들은 자신의 양옆과 맞은편에 있던 아이들의 사탕의 개수를 기억하고 있다가 내년 할로윈에는 자신의 양옆의 친구들의 사탕의 개수, 맞은 편의 친구의 사탕의 개수를 합한 개수만큼 더 갖기를 원한다.
엄마들은 특별한 날인만큼 아이들이 원하는 대로 해주지만 사탕의 총 개수는 매년 N개로 챙겨온다. 이때 아이들의 요구보다 사탕의 개수가 모자라는 년도는 몇 번째 년도인지 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트케이스의 수 T가 주어진다..
각 테스트케이스의 첫 줄에 N이 주어진다.
각 테스트케이스의 두번째 줄에는 첫 해에 아이들이 받은 사탕의 수가 순서대로 공백으로 구분되어 주어진다. 첫 해에 아이들이 받은 사탕의 수는 100 이하의 자연수다.
( 1 ≤ T ≤ 10, 1 ≤ N ≤ 500,000,000 )

출력

각 테스트케이스마다 '#'과 테스트케이스의 번호, 공백을 출력한 뒤 몇번째 해부터 아이들에게 사탕을 줄 수 없게 되는지 출력한다.

문제 풀이

아이들은 원형 식탁에 앉아서 사탕을 먹는데, 

자신의 양옆과 맞은 편에 있던 아이들의 사탕의 개수를 합한 개수만큼 더 갖기를 원합니다.

 

4 2 5 2 5 8 의 사탕을 6명의 아이들이 갖고있다고 할 때, 

4는 자신의 양옆과 맞은 편 아이에게 4만큼을 더해줄 것이고 

2 5 2 5 8 또한 자신의 양옆과 맞은 편 아이에게 자신의 수를 더해줄 것입니다. 

즉, 자신의 수를 다른 수에게 총 3번 더해주는 것입니다. 

총 3번 자신을 다른 수에게 더해주면 결국 총 합에는 각각의 수가 4개씩 존재하게 됩니다. 

따라서, 다음 해에 아이들이 가지게 될 사탕의 총 합은 지난 해의 총 합에 4배 입니다. 

 

이러한 점을 이용하여 총 합이 4배씩 증가 할 때, 만약 n 보다 총 합이 커지면 

그 해가 몇 번째 해인지 출력해주면 됩니다. 


My Code

for tc in range(int(input())):
    n = int(input()) # 사탕의 총 개수

    data = list(map(int,input().split())) # 아이들의 사탕 수

    count = 1
    sum_value = sum(data) # 사탕의 총 개수
    while True:
        if sum_value > n: # 총 개수가 n보다 많아지면 종료 
            break
        sum_value *= 4 # 총 개수가 4배씩 증가 
        count += 1     # 몇 번째 해인지 세어줌

    print('#' + str(tc + 1), end = ' ')
    print(count)

 

 

 

댓글