문제

풀이
def solution(lines):
#lines의 요소들의 최소값, 최대값 도출
max_val = max(max(line) for line in lines)
min_val = min(min(line) for line in lines)
#수직선 그리기(0을 가진 배열로 초기화), 길이는 최대값 - 최소값 + 1
n = max_val - min_val + 1
res_line = [0] * n
cnt = 0
#선분들을 그린다 -> 배열의 값을 올린다
for line in lines :
for i in range(line[0], line[1]) :
res_line[i - min_val] += 1
#2 이상인 경우 : 겹쳐있음
for a in res_line :
if a >= 2 :
cnt += 1
return cnt
- 문제를 처음 보았을 때, 수직선을 그릴 생각을 하였지만, 인덱스에 음수는 존재하지 않기에 어떻게 정의할지 고민을 했다.
- "음수 인덱스를 허용하지 않으면, 양수로 수직선을 이동시키자" 라고 생각했고, 수직선의 길이를 정한 후 각각의 인덱스에 min_val값을 빼주어 중앙 기준으로 인덱싱을 다시 진행하였다.
- 선분을 그린다 = 배열에 값을 더한다, 즉 1씩 더하는 과정을 색칠한다고 생각하기로 했다
- 두 번 이상 색칠된 곳들이 겹치는 범위이다. 즉 값이 2 이상인 곳들에서 cnt += 1 을 진행해 겹치는 선분의 길이를 측정했다.
※Github
'Algorithm' 카테고리의 다른 글
| [프로그래머스] 둘만의 암호 (1) | 2026.03.16 |
|---|---|
| [프로그래머스] 옹알이(1) (1) | 2026.03.10 |
| [프로그래머스] 평행 (0) | 2026.03.10 |
| [LeetCode] 2327. Number of People Aware of a Secret (0) | 2026.03.03 |
| [LeetCode] 92 - Reverse Linked List 2 (1) | 2026.03.03 |
