본문 바로가기

BOJ/Python

[BOJ/백준] 14568 - 2017 연세대학교 프로그래밍 경시대회 (Python)

문제

문제링크

n개의 사탕을 세 사람이 나누기 위한 규칙은 다음과 같다.

  • 남는 사탕은 없어야 한다.
  • 남규는 영훈이보다 2개 이상 많은 사탕을 가져야 한다.
  • 셋 중 사탕을 0개 받는 사람은 없어야 한다.
  • 택희가 받는 사탕의 수는 홀수개가 되어서는 안 된다.

이 규칙을 따를 때 사탕을 세 사람에게 분배하는 서로 다른 경우의 수를 세보자.

 

풀이

택희, 영훈이, 남규의 사탕 수를 각각 a, b, c로 둔다.

택희는 2 이상의 짝수 개를 받으므로 for문의 범위를 range(2, n+1, 2)로 둔다.

이때 n을 포함하기 위해 n+1로 설정했지만 사실상 0개를 받는 사람은 없으므로 n으로 두어도 상관없다.

영훈이는 0개 이상, 남규는 영훈이보다 2개 이상을 받아야 하므로 영훈이의 범위는 range(1, n-a+1)로 둔다.

이때 n-a+1 대산 n-a로 두어도 된다.

이제 남규의 사탕 수를 구할 차례이다.

남은 사탕 수는 n-a-b이고 이 값은 b(영훈)+2보다 크거나 같아야 한다. 이 조건을 만족하면 cnt에 1을 더해준다.

중첩 for문이 끝나고 cnt에 저장된 값이 우리가 원하는 값이다.

맨 처음에 cnt=0으로 설정했으므로 규칙에 맞게 사탕을 분배할 수 없을 때 0을 출력하게 된다.

 

코드

n=int(input())

cnt=0
for a in range(2, n+1, 2):
  for b in range(1, n-a+1):
    if n-a-b>=b+2: cnt+=1
print(cnt)