Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 머신러닝
- SQLD
- 백준
- 오블완
- kt 에이블스쿨 6기 빅프로젝트
- 엘라스틱서치
- kt 에이블스쿨 6기
- KT AIVLE
- ElasticSearch
- 케이티 에이블스쿨 6기 ai
- 네트워크
- kt 에이블스쿨 6기 ai
- 앙상블
- KT 에이블스쿨
- 판다스
- 케이티 에이블스쿨 6기 후기
- 파이썬
- 케이티 에이블스쿨 6기 java
- 프로그래머스
- 케이티 에이블스쿨 6기
- 알고리즘
- 데이터 프레임
- 에이블 기자단
- kt 에이블스쿨 6기 미니 프로젝트
- 케이티 에이블스쿨 기자단
- 구현
- kt 에이블스쿨 기자단
- 케이티 에이블스쿨
- 티스토리챌린지
- kt aivle school
Archives
- Today
- Total
미식가의 개발 일기
[백준/Python] #6064번 카잉 달력 본문

문제

- x, y가 각각 M, N보다 작다면 전날 + 1, 작지 않으면 1
- <M:N>은 달력의 마지막 해이고, <x:y>가 몇 번째 해인지 구하는 문제
| M, N <10, 12> | 1일 | 2일 | 3일 | 4일 | 5일 | 6일 | 7일 | 8일 | 9일 | 10일 | 11일 |
| x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 1 |
| y | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
→ 10일을 보면 x는 M과 같은 값으로 M보다 작아야 한다는 조건을 만족하지 못하므로 11일에 1로 초기화 해준다.
입력
1. 테스트 데이터의 개수 T
2. T개의 M, N, x, y (1 ≤ M, N ≤ 40,000, 1 ≤ x ≤ M, 1 ≤ y ≤ N)
3 10 12 3 9 10 12 7 2 13 11 5 6
출력
<x, y>가 몇 번째 해인지(유효하지 않으면 -1 출력)
33 -1 83
정답
import sys
input = sys.stdin.readline
def cal_year(M, N, x, y):
tmp = x
while tmp <= M * N: # tmp의 범위는 M*N을 넘을 수 없다.
if (tmp - x) % M == 0 and (tmp - y) % N == 0:
return tmp
tmp += M
return -1
if __name__ == "__main__":
T = int(input())
for _ in range(T):
M, N, x, y = map(int, input().split())
print(cal_year(M, N, x, y))
해결 아이디어
- 처음에는 <M, N>까지의 일 수를 계산하고, 해당 일 수 안에 입력받은 <x, y>가 존재한다면 존재한 날짜를 반환하고 존재하지 않는다면 -1을 반환하도록 했지만 시간 초과가 발생했다.
- 알고 보니 이 문제를 풀기 위해서는 특정 공식이 필수였던 것,,
- 위의 코드는 일정한 주기를 가진 두 주기의 일치 시점을 계산해 주는데 특정한 시점에서 시작된 두 주기 <M, N>에 대해 그 값이 일치하는 가장 작은 시점을 찾아준다.
- 주기의 곱인 M * N까지 반복하며 `(tmp - x) % M == 0`, `(tmp - y) % N == 0`로 현재 시점을 나타내는 tmp가 해당 주기를 따르고 시작 값에 맞춰지는지를 확인한다. 이 조건들이 만족한다면 tmp를 반환, 만족하지 않으면 -1을 반환한다.
반응형
'Python > Algorithm' 카테고리의 다른 글
| [백준/Python] #14888번 연산자 끼워넣기 (0) | 2025.04.02 |
|---|---|
| [백준/Python] #1748번 수 이어 쓰기 1 (0) | 2024.12.10 |
| [백준/Python] #1107번 리모컨 (1) | 2024.12.05 |
| [백준/Python] #3085번 사탕 게임 (1) | 2024.11.29 |
| [알고리즘] 우선순위 큐를 이용한 다익스트라(Dijkstra), 최단 경로 찾기 (1) | 2024.10.01 |