육십갑자
풀이
흔히 아는 10 간과 12지를 결합하는 방식과 관련한 코드를 짜는 문제이다.
육 십간 자는 60년마다 회갑이 있기에 이를 기반으로 최소공배수를 구하여서 풀었다.
- N, M 의 최소공배수 구하기
- gapja라는 리스트를 만들고 그 안에 회갑까지 가능한 모든 수를 넣기.
- 이제 찾으려는 년도에 % 연산자를 이용해서 gapja [인덱스]에 넣어서 구현
# 유클리드 호제법을 이용한 최소공배수 구하기
# 최소공약수
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
# 최소공배수
def lcm(a, b):
return a * b // gcd(a, b)
T = int(input())
for testcase in range(1, T+1):
N, M = map(int, input().split())
LCM = lcm(N,M) # N, M의 최소공배수 구하기
s_list = list(map(str, input().split()))
t_list = list(map(str, input().split()))
# 최소공배수만큼 리스트 짜주기
gapja = []
for i in range(LCM):
gapja.append(s_list[i % N] + t_list[i % M])
# 찾으려는 연도 계산하기
answer = []
Q = int(input())
for _ in range(Q):
what_year = int(input())
answer.append(gapja[what_year % LCM -1])
ans = ' '.join(answer)
print(f'#{testcase} {ans}')
'알고리즘 > SWEA' 카테고리의 다른 글
SWEA D3 16800. 구구단 걷기 (python) (1) | 2024.02.24 |
---|---|
SWEA D3 7584. 자가 복제 문자열 (python) (0) | 2024.02.21 |
SWEA D3 19113. 식료품 가게 (python) (0) | 2024.01.30 |
SWEA D2 1859. 백만 장자 프로젝트 (python) (1) | 2024.01.29 |
SWEA D2 1284. 수도 요금 경쟁 (python) (1) | 2024.01.29 |