티스토리 뷰

생각

Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q5789.java n개의 상자에대해서 q개의 작업을 준다. q개의 작업은 L R로 주어지며 1번째 작업일 경우 L부터 R까지 번째의 상자를 1번으로 3번째 작업일 경우는 L부터 R까지 번째의 상자를 3번으로 바꾼다. 최종 작업이 끝났을 때 상자의 상태를 출력하여라.


처음 생각

특정 구간에대해 주기적으로 상태를 바꿔주어야한다. Python으로 풀면 굉장히 쉽게 풀 수 있다. 하지만 일단 Java로 접근을 해보자.


다음 생각

크기가 n인 배열을 선언해준 뒤, q개의 작업을 받아 반복문의 범위를 L-1<= j <R 로 해주어 L-1부터 R-1까지의 상자들이 현 작업의 번호로 바뀌게 해주었다.

▶ 배열의 index가 0부터 시작해서 범위를 잘 봐주어야한다.


다다음 생각

q개의 작업이 끝나면 배열을 출력 조건에 맞게 출력해 주었다.


다다다음 생각

Python은 슬라이싱을 통해서 특정 구간의 값을 바꾸기가 매우쉽다.

▶ Python에서도 index의 시작이 0이므로 arr[L-1:R] 을 통해 배열에서 해당 구간을 슬라이싱 한다.

▶ arr[L-1:R] = [j]*(R-L+1) 을 통해서 슬라이스한 구간을 작업 번호를 나타내는 j로 R-L+1개 만큼 치환해준다.

▶ 이 두 줄로 끝이난다. 문제를 보고 Python으로 간단하게 구현할 수 있다면 Python으로 제출하는것도 좋은것 같다.


방안

1) Java 풀이


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package swexpert.d3;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Q5789 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int tc = Integer.parseInt(br.readLine());
        for(int i=1;i<=tc;i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int q = Integer.parseInt(st.nextToken());
            // n 크기의 배열 선언
            int[] arr = new int[n];
            // q개의 작업이 주어진다.
            for(int j=1;j<=q;j++){
                st = new StringTokenizer(br.readLine());
                int l = Integer.parseInt(st.nextToken());
                int r = Integer.parseInt(st.nextToken());
                // L~R 까지 작업 번호로 바뀜.
                // 배열이 0부터 시작이니 L-1~R-1까지
                for(int k=l-1;k<r;k++)
                    arr[k] = j;
            }
            sb.append("#"+i);
            for(int j=0;j<n;j++)
                sb.append(" "+arr[j]);
            sb.append("\n");
        }
        System.out.println(sb);
    }
}


2) Python 풀이


1
2
3
4
5
6
7
8
tc = int(input())
for i in range(1,tc+1):
    n,q = map(int,input().split())
    arr = [0]*n
    for j in range(1,q+1):
        l,r = map(int,input().split())
        arr[l-1:r] = [j]*(r-l+1)
    print('#'+str(i)," ".join([str(i) for i in arr]))


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday