[문제 링크] 👇
풀이
💡입력받은 Q 를 N과 M의 길이로 나눈다.
순환 구조
- 리스트 s는 길이가 N이고, 리스트 t는 길이가 M이므로, s와 t의 요소들은 순환하면서 사용된다.
- 예를 들어, 리스트 s에 "a", "b", "c"가 있고, 리스트 t에 "d", "e", "f", "g"가 있다면,
- 첫 번째 이름은 s[0] + t[0] = "ad",
- 두 번째 이름은 s[1] + t[1] = "be",
- 세 번째 이름은 s[2] + t[2] = "cf",
- 네 번째 이름은 다시 s[0] + t[3] = "ag"로 돌아간다.
주기적 접근과 나머지 연산
- q % N과 q % M을 이용하면, q번째 요소를 N과 M의 길이 내에서 반복적으로 순환하도록 만들 수 있다.
- 리스트의 인덱스는 0부터 시작하므로, q - 1로 조정한 뒤 N과 M으로 나눈 나머지를 구해 인덱스를 얻어낸다
- 예를 들어, Y = 5일 때 s의 인덱스는 (Y - 1) % N = 4 % N이 된다.
- 이를 통해 s와 t 리스트의 요소들이 순환되며, N번째 이후에는 다시 첫 번째 요소로 돌아간다.
코드에서 q % N - 1
- 이 표현은 리스트의 인덱스가 0부터 시작하기 때문에 필요한 조정이다.
- 예를 들어, Y = 1이라면, (1 - 1) % N = 0이 되어 s와 t 리스트의 첫 번째 요소가 결합되어야 하므로 q - 1을 통해 0부터 시작하는 인덱스를 맞춘다.
따라서, q % N과 q % M을 사용하여 년도 Y에 해당하는 이름을 주기적으로 구할 수 있다.
Solution
T = int(input()) # 테스트 케이스 수
for test_case in range(1, T + 1):
N, M = map(int, input().split())
n = input().split()
m = input().split()
Q = int(input())
result = []
# 육십갑자 계산
for _ in range(Q):
q = int(input())
result.append(n[q % N - 1] + m[q % M - 1])
print(f"#{test_case} {' '.join(result)}")
'SWEA' 카테고리의 다른 글
[SWEA] 4299. 태혁이의 사랑은 타이밍 (Python/D3) (0) | 2024.11.04 |
---|---|
[SWEA] 15230. 알파벳 공부 (Python/D3) (0) | 2024.11.04 |
[SWEA] 10912. 외로운 문자 (Python/D3) (0) | 2024.11.01 |
[SWEA] 1222. [S/W 문제해결 기본] 6일차 - 계산기1 (Python/D4) (0) | 2024.10.31 |
[SWEA] 13547. 팔씨름 (Python/D3) (0) | 2024.10.30 |