[문제 링크] 👇
풀이 방법.
- 상자 리스트 초기화
- 각 테스트 케이스마다 크기가 N인 리스트 box를 0으로 초기화하여 만든다. 이 리스트는 각 구간의 값을 저장하는 역할을 한다.
- 구간에 값 할당
- Q개의 구간 입력을 반복해서 처리한다.
- 각 구간에 대해 L부터 R까지 반복문을 돌며, 현재 구간 번호 i 로 리스트의 해당 구간 요소들을 업데이트한다.
- 결과 출력
- 리스트 box의 값들을 문자열로 변환해 공백으로 구분하여 출력한다.
Solution
T = int(input()) # 테스트 케이스 수
for test_case in range(1, T + 1):
N, Q = map(int, input().split())
box = [0]*N # 박스 리스트 생성 후 모두 0으로 초기화
for i in range(1, Q + 1):
L, R = map(int, input().split())
for l in range(L - 1, R):
box[l] = i
print(f"#{test_case} {' '.join(map(str, box))}")
개선할 점
해당 코드에서 효율성 측면에서 크게 개선할 여지는 없다. 지금 작성된 코드의 로직은 테스트 케이스마다 box 리스트를 미리 초기화하고, 각 구간을 반복하면서 값들을 할당하는 방식으로 필요한 작업을 효율적으로 수행하고 있다.
하지만, 리스트 할당 범위를 조금 줄이는 방법 정도는 고려해볼 수 있다. 하지만 O(N * Q) 복잡도는 본질적으로 바뀌지 않으므로, 코드 최적화의 이점은 크지 않을 수 있다.
- box[l:R] 슬라이싱 할당 사용 : for문 대신 슬라이싱 할당을 사용해 구간을 할당할 수 있다.
개선된 코드
T = int(input()) # 테스트 케이스 수
for test_case in range(1, T + 1):
N, Q = map(int, input().split())
box = [0] * N
for i in range(1, Q + 1):
L, R = map(int, input().split())
box[L - 1:R] = [i] * (R - L + 1)
print(f"#{test_case} {' '.join(map(str, box))}")
'SWEA' 카테고리의 다른 글
[SWEA] 10580. 전봇대 (Python/D3) (1) | 2024.11.13 |
---|---|
[SWEA] 6485. 삼성시의 버스 노선 (Python/D3) (2) | 2024.11.13 |
[SWEA] 1940. 가랏! RC카! (Python/D2) (0) | 2024.11.10 |
[SWEA] 2005. 파스칼의 삼각형 (Python/D2) (0) | 2024.11.10 |
[SWEA] 20551. 증가하는 사탕 수열 (Python/D3) (0) | 2024.11.08 |