이롭게 현명하게

[programmers - 120876] Lv0 겹치는 선분의 길이/ Python 본문

알고리즘/programmers

[programmers - 120876] Lv0 겹치는 선분의 길이/ Python

dev_y.h 2023. 8. 24. 18:04
728x90
반응형


문제

풀이

코드 설명

코드


 

[programmers - 120876] Lv0 겹치는 선분의 길이 / Python


[🔗문제🔗]

[제한사항]

[입출력 예시]

번호 입력 출력
 1 [[0, 1], [2, 5], [3, 9]]   2
2 [[-1, 1], [1, 3], [3, 9]] 0
3 [[0, 5], [3, 9], [1, 10]] 8
번호 입력 출력
4 [[4, 7], [4, 5], [6, 7]]  2
5 [[1, 2], [2, 3], [3, 4]] 0
6 [[0, 9], [1, 1], [2, 5]] 3
7 [[0, 2], [-3, -1], [-2, 1]] 2
8 [[0, 3], [-3, -1], [-2, 3]] 4
9 [[0, 3], [0, 3], [0, 3]] 5
10 [[-3, -1], [-2, 3], [2, 3]] 2
11 [[0, 6], [0,6], [2, 4]] 2
12 [[1, 2], [1, 3], [1, 2]] 1
13 [[1, 12], [3, 6], [2, 4]] 4
14 [[0, 5], [4, 9], [1, 10]] 8
15 [[0, 10], [1, 3], [4, 7]] 5
16 [[1, 3], [2, 5], [0, 7]] 4
17 [[1, 3], [4, 7], [2, 8]] 4

[풀이]

lines = [[0, 5], [3, 9], [1, 10]]이 있다. 선분의 0~10까지 있다.

첫 번째 선분은 [0,5]이다.

두 번째 선분은 [3,9]이다.

세 번째 선분은 [1,10]이다.

이때 두 개 이상의 선분이 겹치는 총 길이는 다음과 같다.

 

두 개 이상 겹치는 선분은 어떻게 구해야 할지 생각하는 게 어려웠다.

선분의 길이별로 횟수를 체크하면 가능할 거 같다는 생각이 들었다.

어려웠던 부분을 뽑자면 그어지는 선분의 길이였다.

lines에서 최솟값과 최댓값을 사용해 list를 생성하여 인덱스를 활용하였지만 런타임 아웃으로 통과하지 못했다.

-100~100의 범위에서 음수를 어떻게 적용해야 할지를 많은 시간이 들여 생각하였다.

0~200의 범위의 리스트를 만들어 사용하여 해결하였다.

 


[코드 설명]

 line = [0 for _ in range(200)] -100~100 까지의 범위에서 해당 점에 선분이 그어진 횟수


[-3,-1]은 line [-3 + 100]로 line[97] 인덱스가 -3을 의미한다.
line[-1+100]로 line[99] 인덱스가 -1을 의미한다.
    for i in range(3):
        start = lines[i][0]
        end = lines[i][1]
        for j in range(start,end):
            line[j+100]+=1
그어지는 선분의 시작점 :start
그어지는 선분의 끝 점 : end
for j : 선분의 길이 만큼 +1 
    for i in line:
        if i>=2: # 또는 if i>1:
            answer+=1
두개의 선분이 겹치는 경우 answer에 +1
두 개 이상의 선분이 겹친 구간의 길이를 알 수 있다.

<코드>

def solution(lines):
    answer = 0
    line = [0 for _ in range(200)]
    for i in range(3):
        start = lines[i][0]
        end = lines[i][1]
        for j in range(start,end):
            line[j+100]+=1
    for i in line:
        if i>=2: # 또는 if i>1:
            answer+=1
    return answer

잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

728x90
반응형
Comments