문제
육십갑자 체계를 일반화한 다음과 같은 상황을 생각해 보자. N개의 문자열 s1, s2, s3 …, sN 과 M개의 문자열 t1, t2, t3, …, tM 이 있다. 이들은 알파벳 소문자로만 이루어져 있다. 1년은 두 문자열 s1, t1 을 이어붙인 이름을 가지고, 그 다음 해는 각각의 문자열 리스트에서 다음 순서에 해당되는 문자열을 이어붙인 이름을 가진다. 만약 리스트에서 다음 순서가 없다면, 첫 원소로 돌아간다.
예를 들어, N = 3, M = 4, s = {“a”, “b”, “c”}, t = {“d”, “e”, “f”, “g”} 라고 하면 매년 아래 표처럼 이름이 붙여진다. 일반적인 육십갑자 체계는 N = 10, M = 12 를 만족한다.

내가 쓴 코드 1
T = int(input())
for t in range(T):
N, M = map(int, input().split())
S = list(input().split())
T = list(input().split())
Q = int(input())
ans = []
for q in range(Q):
year = int(input())
cnt = 1
i = j = 0
while cnt <= year:
if i == N:
i = 0
if j == M:
j = 0
if cnt == year:
ans.append(S[i] + T[j])
break
i, j, cnt = i + 1, j + 1, cnt + 1
print(f'#{t+1}', end=' ')
print(*ans)
-> 시간 초과 난 코드, 난 이렇게 푸는 게 당연할 줄 알았는데, 생각해보니까 2020년꺼 구하려고 반복문을 2020번 돌리는 게 완전 바보 같은거다... 좀 더 생각해보니 아래 코드 방법이 생각남..... 난 완전 노가다쟁이 ㅎ
내가 쓴 코드 2
T = int(input())
for t in range(T):
N, M = map(int, input().split())
S = list(input().split())
T = list(input().split())
Q = int(input())
ans = []
for q in range(Q):
year = int(input())
cnt = 1
i = year % N - 1
j = year % M - 1
ans.append(S[i] + T[j])
print(f'#{t+1}', end=' ')
print(*ans)
출력 결과
#1 sinyu imsul gyehae gapja musul gihae gyeongja
제출 결과

728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
| [BOJ #4673] 셀프 넘버 (0) | 2024.03.07 |
|---|---|
| [BOJ #4779] 칸토어 집합 (1) | 2024.03.06 |
| [BOJ #2606] 바이러스 (1) | 2024.03.05 |
| [BOJ #1244] 스위치 켜고 끄기 (0) | 2024.03.05 |
| [BOJ #2846] 오르막길 (1) | 2024.03.03 |