[pg] 겹치는 선분의 길이

쩡이·2026년 9월 15일

문제

겹치는 선분의 길이

분석

길이가 1인 단위 선분의 모임으로 생각하려 했으나 선분의 길이가 매우 길어지면 불가능함
1. -100 부터 100까지 나타낼 수 있는 길이가 200이고 원소는 0인 배열 lst를 만든다
2. 음수 좌표를 대비해서 모든 lines 요소에 100을 더한다
3. lines에서 지나간 좌표면 lst의 해당 인덱스 값을 1 증가시킨다
4. lst값이 2 이상인 것들의 길이를 구한다(겹치는 선분에 대해서 중복을 허용하지 않기때문)

시도

def solution(lines):
    # -100부터 100까지 나타낼수 있는 길이 200짜리 배열 선언
    lst=[0]*200
    #음수일 경우를 대비해서 +100
    plus_line=[[x+100 for x in row] for row in lines]
    
    #lines에서 지나간 좌표면 lst의 해당 인덱스값 증가
    for i in range(0,3):
        for j in range(0,2):
            dot = plus_line[i][j]
            lst[dot]+=1
    
    #lst값이 2 이상인 것들의 길이
    answer=0
    for i in range(0,200):
        if(lst[i]>=2):
            answer+=1
    return answer

-> 코드가 양 끝점만 찍고 있어서 구간 전체를 지나는 점을 찍어야 한다

정답코드

def solution(lines):
    #200개의 빈 배열 생성
    lst = [0]*200
    
    #주어진 좌표에 100을 더해서 음수 좌표가 없게 만들기
    plus_lines = [[x+100 for x in row] for row in lines]
    
    #plus_lines에 들어간 값에 해당하는 index값을 lst의 index값으로 두고 1 증가
    for row in plus_lines:
        for j in range(row[0],row[1]): #좌표의 시작점부터 끝점까지
            lst[j]+=1
    answer = 0
    for i in range(0,200):
        if lst[i]>=2:
            answer+=1
    return answer
profile
여기 초과학기가 확정되어 울면서 학교를 다니는 사람이 있습니다.

0개의 댓글