[SWEA][D3][#05789] 현주의 상자 바꾸기

작성:    

업데이트:

카테고리:

태그: , ,

출처

학습용 포스트입니다. 본 포스트가 문제가 될 시 수정 또는 삭제하겠습니다.


문제

현주는 1번부터 N번까지 N개의 상자를 가지고 있다. 각 상자에는 숫자를 새길 수 있는데 처음에는 모두 0으로 적혀있다.

숫자가 너무 단조로웠던 현주는 다음 Q회 동안 일정 범위의 연속한 상자를 동일한 숫자로 변경하려고 한다. 변경하는 방법은 다음과 같다.

  • i (1 ≤ i ≤ Q)번째 작업에 대해 L번 상자부터 R번 상자까지의 값을 i로 변경

현주가 Q회 동안 위의 작업을 순서대로 한 다음 N개의 상자에 적혀있는 값들을 순서대로 출력하는 프로그램을 작성하라.


입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 두 정수 N, Q (1 ≤ N, Q ≤ 103)가 공백으로 구분되어 주어진다.

다음 Q개의 줄의 i번째 줄에는 Li, Ri (1 ≤ Li ≤ Ri ≤ N)이 주어진다.


출력

각 테스트 케이스마다 첫 번째 줄에는 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,

각 테스트 케이스마다 Q개의 작업을 수행한 다음 1번부터 N번까지의 상자에 적혀있는 값들을 순서대로 출력한다.


예제

입력

1
5 2
1 3
2 4  // Test Case 개수
// 첫 번째 Test Case, N=5, Q=2
// i = 1일 때, L=1, R=3
// i = 2일 때, L=2, R=4


출력

#1 1 2 2 2 0  //첫 번째 테스트케이스 결과


My Sol

T = int(input())
for tc in range(1, T+1):
    N, Q = map(int, input().split())

    result = [0]*N
    for i in range(1, Q+1):
        a, b = map(int, input().split())
        for j in range(a, b+1):
            result[j-1] = i

    print(f'#{tc}', *result)

특별히 D3이라는 난이도가 이해가 되지 않을만큼 쉽게 푼 문제였다. 테스트 케이스에 대한 정보들을 모두 처리하여 변수에 할당하였다.

상자를 바꾼다고 하였으나, 결국엔 i가 커짐에 따라 범위에 해당하는 박스들을 i로 덮어씌우면 되는 것이었다. 그렇다면 최초에는 상자의 개수 N만큼 0을 가지는 배열 변수 result를 만들고, 여기에 1부터 시작하여 총 Q회 덮어씌우기를 시작하는 i를 범위에 맞게 항목들을 재정의해주면 되는 것이다.

그렇다보니 for문 내에 for문이 들어가는 것이고, 테스트 케이스가 여러 개이다보니 for문이 전체에 또 씌워져서 3중 for문을 만들게 되는 것이 찝찝하긴 했다. 하지만 동기들 중에서는 메모리, 실행시간, 코드길이 모두 가장 효율적인 풀이법이었다.


결과

PASS

댓글남기기