본문 바로가기

STUDY/Python

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

728x90

[나의 코드]

def solution(lines):
    answer = 0
    box = [line for line in lines]
    b_box = []
    
    for b in box :
        for i in range(b[0]+1, b[1]+1):
            b_box.append('{0} {1}'.format(i-1,i))
    
    bb_box = list(set(b_box))
    
    for bb in bb_box:
        if b_box.count(bb)>1:
            answer += 1
    
    return answer

 

[다른 사람 코드]

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])

 

.... 이 코드 보고 현타 왔다..... ㅜㅡㅜ

 

일단 위 코드를 풀어보면

 각 리스트 요소의 범위를 다 구해서 겹치는 값들의 길이로 구하는 방식이라는데.. 

음.. 잘 와닿지는 않는다.

 

[다른 사람 풀이2]

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))

 

& : 교집합

| : 합집합

728x90