[프로그래머스][파이썬] 겹치는 선분의 길이 - 배열 (Level 0)

뻥튀기아이스크림·2025년 3월 28일
1
post-thumbnail

◽ 문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/120876

◽ 문제

◽ 입력 & 출력

◽ 내 풀이

def solution(lines):
    line = [0] * 201 # 0 ~ 200

    for s, e in lines:
        for i in range(s + 100, e + 100):
            line[i] += 1

    return sum(1 for i in line if i > 1)
  • 선분의 양 끝점의 범위를 배열의 길이로 초기화했다.
  • lines 를 순회하며 선분이 지나가는 인덱스에 1 을 더했다.
  • 마지막으로 해당 인덱스의 값이 1 보다 크면 1 씩 더하여 반환했다.

◽ 다른 사람 풀이

def solution(lines):
    s1 = set(i for i in range(lines[0][0], lines[0][1]))
    s2 = set(i for i in range(lines[1][0], lines[1][1]))
    s3 = set(i for i in range(lines[2][0], lines[2][1]))
    
    return len((s1 & s2) | (s2 & s3) | (s1 & s3))
  • lines3 의 고정 길이를 갖고 있어 나오는 풀이같다.
  • 교집합과 합집합을 이용가능한 세트 자료형을 이용하여 겹치는 선분의 길이를 구했다.

◽ 더 나아가기

  • &intersection()집합 연산으로, 겹치는 부분을 반환한다.
  • |union()집합 연산으로, 두 집합이 합쳐진 집합을 반환한다.
  • -difference()집합 연산으로, 겹치는 부분을 제거한 집합을 반환한다.



피드백은 언제나 환영입니다 :)

profile
성장하고 싶은 개발자

0개의 댓글