[프로그래머스] 겹치는 선분의 길이

GUNHEE LEE·2024년 2월 9일
0

coding_test

목록 보기
5/6

겹치는 선분의 길이

def solution(line):
    answer = 0
    count = [0 for _ in range(200)]
    for l in line:
        for i in range(l[0], l[1]):
            count[i + 100] += 1
    
    answer += count.count(2)
    answer += count.count(3)
    return answer

첫 번째 솔루션

  • 선분의 길이 제한이 -100 이상, 100 이하인 정보를 사용한다.
  • 각 점의 위치마다 선분이 지나가면 점에 +1 을 추가한다. 모든 선분을 지난 후 해당 점이 포함된 선분의 개수가 2개 혹은 3개인 경우에만 정답으로 세서 겹치는 선분의 총 길이를 계산한다.

def solution(line):
    sets = [set(range(min(l), max(l))) for l in line]
		return len(sets[0] & sets[1] | sets[0] & sets[2] | sets[1] & sets[2])

두 번째 솔루션

  • set()으로 최소, 최소 길이를 받아주고 두 번 겹치는 선분은 and 연산으로 결합한다. 이러면 겹치는 선분의 범위만 구할 수 있다.
  • 겹치는 선분의 최종 합을 구하려면 겹치는 선분끼리는 or 연산으로 결합해야 한다. 이때 set를 사용하기 때문에 범위가 중복되지 않는다.

후기

  • level 0 치고는 아이디어 떠올리기가 어려웠던 문제라고 생각한다. 겹치는 선분의 길이의 합은 겹치는 점의 총 갯수를 세서 구할 수 있다. set을 사용하는 방법은 떠올리기 쉽지 않을 것 같다.
profile
새싹 개발자

0개의 댓글