※ SW expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
육십갑자 체계를 일반화한 다음과 같은 상황을 생각해 보자. 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 를 만족한다.
두 문자열 리스트와 Q개의 질문이 주어진다. 각 질문으로 이름을 알고 싶은 년도의 숫자가 주어질 때, 그 이름을 반환하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 TC가 주어진다. 이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다. 각 테스트 케이스는 다음과 같이 구성되었다.
- 첫 번째 줄에는 각 문자열 리스트의 길이 N, M 이 주어진다. (1 ≤ N,M≤20)
- 다음 줄에는 N개의 문자열 s1, s2, s3 …, sN 이 주어진다.
- 다음 줄에는 M개의 문자열 t1, t2, t3, …, tM 이 주어진다.
- 다음 줄에는 정수 Q 가 주어진다.(1≤Q≤2020)
- 다음 Q개의 줄에는 이름을 알고 싶은 년도 Y가 주어진다.(1≤Y≤10^9)
- 주어지는 문자열들은 알파벳 소문자로만 이루어져 있고 그 길이가 10을 넘지 않는다.
[출력]
각 테스트 케이스 마다 한 줄씩, 이름에 해당하는 Q개의 문자열을 입력 순서대로 출력하라.
<문제풀이>
N과 M을 입력받고, split으로 리스트로 만든 후, 연도를 입력받고 규칙에 맞게 출력하면 되는 문제이다.처음엔 가능한 조합을 미리 만들고 나머지 값으로 출력하려 했는데, 생각해 보니 N*M을 미리 구해두는 것보다 따로 계산하는 게 더 빠를 것 같아 두 번에 걸쳐 나누기를 진행했다.
해당 년도가 0인 경우에 예외처리를 한 이유는, 0으로는 나눌 수 없기 때문이다.
<소스코드>
T = int(input())
for tc in range(1, T + 1):
print(f'#{tc}', end=' ')
N, M = map(int, input().split())
N_list = list(input().split())
M_list = list(input().split())
for _ in range(int(input())):
year = int(input()) - 1
if year == 0:
print(f'{N_list[0]}{M_list[0]}', end=' ')
else:
print(f'{N_list[year % N]}{M_list[year % M]}', end=' ')
print()
'algorithm' 카테고리의 다른 글
[프로그래머스 LV.3 야근 지수] (0) | 2025.04.30 |
---|---|
[SWEA 19113번 식료품 가게] (0) | 2024.07.04 |
[프로그래머스 LV.2 롤케이크 자르기] (1) | 2024.01.31 |
[프로그래머스 LV.2 광물 캐기] (1) | 2024.01.04 |
[프로그래머스 LV.2 과제 진행하기] (1) | 2024.01.03 |