본문 바로가기
프로그래머스/0단계

(Python/Lv0) 겹치는 선분 길이

by windy7271 2022. 10. 20.
728x90
반응형

문제 출처 :https://school.programmers.co.kr/learn/courses/30/lessons/120876?language=python3

 

풀이:

from collections import defaultdict
from itertools import combinations


def solution(lines):

    _list = [ sorted(pos) for pos in lines]
    lis = list(combinations(lines,2))
    spot = []
    for a,b in lis:
        spot.append([max(a[0], b[0]) , min(a[1],b[1])])
    if len(spot) <= 1:
        return 0
    pos_space = defaultdict(int)

    for pos in lines:
        for _pos in range(pos[0], pos[1]+1):
            pos_space[_pos] += 1
    overlap = [ k for k,v in pos_space.items() if v >= 2]
    if len(overlap) <= 2:
        return 0
    if len(overlap) != overlap[-1] - overlap[0] + 1:
        result = []
        for i in range(overlap[0], overlap[-1]+1 ):
            result.append(i)
        return len(overlap) - (len(result)-len(overlap))

    if len(overlap) >= 2:
        return overlap[-1] - overlap[0]
    else:
        return 0
        
 1,2,5,7 테스트케이스가 틀림

비슷한 문제를 백준 골드,플레에서 본거같은데,,

 

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

진짜 놀랍다,, 감탄만 나온다

더 열심히 공부해야겠다 

출처: 프로그래머스 조동건

반응형

댓글