출처 : 백준, https://www.acmicpc.net/problem/1476
1476번: 날짜 계산
준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타
www.acmicpc.net
진짜 너무 어렵다 이러면서 머리를 싸맸는데
바본가봐.........하긴 올해도 2022년인데........
더보기
풀이
if __name__ == '__main__':
E, S, M = map(int, input().split())
for i in range(7980):
if i % 15 == E-1 and i % 28 == S-1 and i % 19 == M-1:
print(i + 1)
break
나머지로 어떻게 해야한다는 것까지는 유추했을텐데, n으로 나눈 나머지는 0~n-1까지로 구성되므로
나머지를 활용하고 싶다면 1~n이 아니라 1을 빼서 범위를 0~n-1로 맞춰주어야한다.
이제 1을 뺸 0년부터 시작하는 즉, E, S, M이 0, 0, 0부터 시작한다고 생각하자.
각 E, S, M은 15, 28, 19년을 주기로 각각 반복되므로 전체의 최소공배수를 하면, 7980이다.
즉, 0년부터 7979년까지는 전부 조합이 다르다가 7980년에 다시 0, 0, 0으로 돌아가는 것이다.
7980 정도는 컴퓨터한테 껌이므로 7980까지 돌면서 처음 나오는 수를 출력해주면 된다.
이때, 0년부터 시작했기 때문에 +1을 해서 출력해주어야한다.
시간 복잡도
O(1)
다른 사람의 풀이를 보면서 알게 된 점
-
고찰
너무 허탈. 문제를 보면 규칙을 찾으려고하지 전부 다 탐색해본다는 생각을 잘 못하겠다.
나머지를 활용하는 문제라는 느낌이 오면 나머지의 범위에 맞게 나타나도록 바꾸어야한다.
'알고리즘 > Python' 카테고리의 다른 글
[python] 백준 6064 - 카잉 달력 (0) | 2022.03.28 |
---|---|
[python] 백준 14500 - 테트로미노 (0) | 2022.03.28 |
[python] 백준 14501 - 퇴사 (0) | 2022.03.28 |
[python] 백준 14889 - 스타트와 링크 (0) | 2022.03.26 |
[python] 백준 3085 - 사탕 게임 (0) | 2022.03.22 |