Algorithm/SW Expert Academy

[SWEA] 5789 현주의 상자 바꾸기

SSONGMI 2021. 2. 8. 23:16
반응형

1. 테스트 케이스의 수(T)를 입력받는다.

2. 상자의 개수(N)과 작업횟수(Q)를 입력받는다.

3. N의 크기만큼 상자를 배열로(boxes) 만든다.

4. 작업횟수 Q만큼 반복하며 작업을 수행하기 위해 L과 R을 입력받는다.

5. L번 상자부터 R번 상자까지의 수를 i로 바꾸는데 이때 이 세가지 모두 1-based이기 때문에 그 값을 수정해준다.

6. L-1부터 R-1 인덱스까지 상자를 돌며 그 값을 i로 바꿔준다.

7. 출력 형식을 Arrays.toString을 하면[ ]로 양 옆이 감싸져있고, ","로 요소들이 구분되어 있기 때문에 그 값들을 모두 없애준다.(replace())사용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class Solution {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        int T = Integer.parseInt(br.readLine());
 
        for (int tc = 1; tc <= T; tc++) {
            st = new StringTokenizer(br.readLine());
            // N: 상자의 개수 , Q: 작업횟수
            int N = Integer.parseInt(st.nextToken());
            int Q = Integer.parseInt(st.nextToken());
 
            // 상자마련
            int[] boxes = new int[N];
 
            // 작업 횟수만큼 반복
            for (int i = 1; i < Q + 1; i++) {
                st = new StringTokenizer(br.readLine());
                int L = Integer.parseInt(st.nextToken());
                int R = Integer.parseInt(st.nextToken());
 
                for (int j = L - 1; j <= R - 1; j++)
                    boxes[j] = i;
            }
            sb.append("#" + tc + " " + Arrays.toString(boxes).replace(", ", " ").replace("[", "").replace("]", "")+"\n");
        }
        System.out.println(sb);
    }
}
반응형