(1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19) 인 이 범위가 포인트다.
예를 들어 1 1 1에서 시작하여 1씩 증가하다가 15 15 15가 되는 순간 E는 범위 끝에 도달했기 때문에 다음 회차는 1 16 16이 되어 버린다.
마찬가지로 이 상태에서 1씩 계속 더 증가하다가 4 19 19 가 되면 이젠 M이 범위 끝에 도달하여 다음 회차는 5 20 1이 되어버리고, 이후 S도 13 28 9가 되면 범위 끝에 도달해서 14 1 10이 되는 구조인 것이다. 이렇게 세 변수가 각각 범위에 맞춰 1로 회귀하는 과정을 반복할 때, 우연히 딱 처음으로 각 범위로 나눈 나머지 값이 0이 되는 시점의 수를 출력하면 이것이 바로 구하고자 하는 년도가 될 것!
# (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)
E, S, M = map(int, input().split())
i = 1
while(1):
if (i-E)%15 == 0 and (i-S)%28==0 and (i-M)%19==0:
print(i)
break
i+=1
중요한 건 범위에 도달했을 때 0이 아니라 1로 회귀하기 때문에 변수 i를 1로 설정하는 것이다.
if문을 자세히 설명하자면, 예를 들어 15 15 15 인 경우 if문 밖의 i+=1 으로 인하여 i=15 이기 때문에 i-E = 0으로 첫 번째 항목인 (i-E)%15 == 0을 만족하며 두 번째와 세 번째 항목인 i-S와 i-M도 모두 0으로 충족하기 때문에 현재 i값이 15를 출력하고 종료하게 된다.
그러나 1 16 16을 입력하면 첫 루프때(i=1일 때) i-E=0으로 첫 번째 (i-E)%15 == 0 항목은 만족하지만, 두 번째 항목이 i-S = -15으로 0이 아니기 때문에 조건을 만족하지 못하게 된다.
따라서 위 조건식 속 세 가지 조건을 모두 만족해야 현재 년도인 i를 출력하고 탈출할 수 있는 셈이다.
'Python' 카테고리의 다른 글
[백준/Python] 1927 : 최소 힙 (3) | 2024.11.16 |
---|---|
[백준/Python] 2075 : N번째 큰 수 (0) | 2024.11.16 |
[백준/Python] 11726 : 2xn 타일링 (0) | 2024.11.03 |
[백준/Python] 11659 : 구간 합 구하기 4 (1) | 2024.11.03 |
[백준/Python] 15235 : Olympiad Pizza (0) | 2024.11.03 |