알고리즘(백준 등) 공부

SWEA 19185. 육십갑자

posite 2026. 4. 27. 14:49

N개의 문자열 리스트 S와 M개의 문자열 리스트 T를 순서대로 조합하여 1년에는 S1과 T1을 연결하고, 2년에는 S2와 T2 ... 이렇게 연결할 때,  1~2020년 사이의 특정 연도의 이름을 구하는 문제이다.

 

각 리스트 별 주기는 리스트의 크기이며 나머지 연산을 하여 연도의 이름을 구한다. 나머지가 0이면 리스트의 마지막 문자열이 된다.

String[] A = new String[n+1];
st = new StringTokenizer(br.readLine());
for(int i=1; i<=n; i++) {
    A[i] = st.nextToken();
}
String[] B = new String[m+1];
st = new StringTokenizer(br.readLine());
for(int i=1; i<=m; i++) {
    B[i] = st.nextToken();
}

int q = Integer.parseInt(br.readLine());
for(int i=0; i<q; i++) {
    int year = Integer.parseInt(br.readLine());
    int aIndex = year % n, bIndex = year % m;
    if(aIndex == 0) {
        aIndex = n;
    }
    if(bIndex == 0) {
        bIndex = m;
    }
    sb.append(A[aIndex]).append(B[bIndex]).append(' ');
}

 

 

결과 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int tc = 1; tc <= T; tc++) {
            sb.append('#').append(tc).append(' ');
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken()), m = Integer.parseInt(st.nextToken());
            String[] A = new String[n+1];
            st = new StringTokenizer(br.readLine());
            for(int i=1; i<=n; i++) {
                A[i] = st.nextToken();
            }
            String[] B = new String[m+1];
            st = new StringTokenizer(br.readLine());
            for(int i=1; i<=m; i++) {
                B[i] = st.nextToken();
            }
            int q = Integer.parseInt(br.readLine());
            for(int i=0; i<q; i++) {
                int year = Integer.parseInt(br.readLine());
                int aIndex = year % n, bIndex = year % m;
                if(aIndex == 0) {
                    aIndex = n;
                }
                if(bIndex == 0) {
                    bIndex = m;
                }
                sb.append(A[aIndex]).append(B[bIndex]).append(' ');
            }
            sb.append('\n');
        }
        br.close();
        System.out.print(sb);
    }
}