Tiny Bunny
본문 바로가기
Algorithm/Python

[SWEA #19185] 육십갑자

by nowag 2024. 3. 5.

문제

육십갑자 체계를 일반화한 다음과 같은 상황을 생각해 보자. 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