https://www.acmicpc.net/problem/25186
25186번: INFP 두람
옷의 총개수는 C++의 32비트 int 자료형의 최댓값인 2,147,483,647을 초과할 수도 있다.
www.acmicpc.net
문제 해석
첫 번째 줄에는 옷의 종류를, 두 번째 줄에는 종류별 옷의 개수를 입력한다.
옷의 총 개수는 친구들의 개수와 같다.
원형으로 둘러섰을 때 이웃한 사람과 옷이 겹치지 않으면 Happy를, 겹치면 Unhappy를 출력한다.
코드
def infp():
check = 'Happy'
n = int(input())
cloth_list = list(map(int, input().split())) # 두번째 줄에서 입력받은 수들로 리스트 생성
check_cloth = int(sum(cloth_list) / 2) # [인원수 / 2]
for i in range(len(cloth_list)):
if check_cloth < cloth_list[i]:
if n == 1:
if cloth_list[i] == 1:
continue
else:
check = 'Unhappy'
break
else:
check = 'Unhappy'
return check
print(infp())
문제 풀이
예제 입력만 먼저 살펴 보자.
예제 입력 1을 먼저 보면
5
1 5 4 1 2가 입력된 것을 볼 수 있다.
옷의 종류를 각각 1, 2, 3, 4, 5라고 했을때, 옷의 총 개수가 사람의 개수이므로
1(1명)
2, 2, 2, 2, 2(5명)
3, 3, 3, 3(4명)
4(1명)
5, 5(2명)
만큼 사람이 있는 것이다.
원형으로 둘러 섰을 때, 이웃한 사람이 옷이 겹치지 않으려면 그 어떤 종류의 옷을 입은 사람도 [총 사람의 개수 / 2] 명을 넘어서는 안된다. (여기서 []는 가우스 함수)
또한 N = 1일 때 d1 > 1인지, d1 = 1인지도 구분을 해야 한다(d1 > 1이면 Unhappy 이지만, d1 = 1이면 Happy 이기 때문이다.)
'백준' 카테고리의 다른 글
[BOJ/python] 15829번 Hashing (0) | 2022.06.19 |
---|---|
[BOJ/python] 11729번 하노이 탑 이동 순서 (0) | 2022.06.19 |
[BOJ/python] 10162번 전자레인지 (0) | 2022.05.16 |
[BOJ/python] 23972번 악마의 제안 (0) | 2022.03.27 |
[BOJ/python] 4740번 거울, 오! 거울 (0) | 2022.03.20 |