티스토리 뷰
생각
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])) |
'알고리즘 > SW Expert' 카테고리의 다른 글
[SW Expert] 3752. 가능한 시험 점수 (0) | 2019.01.13 |
---|---|
[SW Expert] 6019. 기차 사이의 파리 (0) | 2018.12.24 |
[SW Expert] 5948. 새샘이의 7-3-5 게임 (0) | 2018.12.16 |
[SW Expert] 6190. 정곤이의 단조 증가하는 수 (0) | 2018.12.15 |
[SW Expert] 6718. 희성이의 원근법 (0) | 2018.12.14 |
- Total
- Today
- Yesterday