Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발계발

프로그래머스 - 겹치는 선분의 길이(120876) 본문

알고리즘

프로그래머스 - 겹치는 선분의 길이(120876)

Ju_Nik_E 2024. 4. 23. 17:40

문제 설명

 

제한사항

 

접근방식

- lines 배열을 정렬

- 겹치는 구간을 저장할 배열 생성, True / False로 기록

 

풀이코드

def getOverlab(line1, line2):
    if line1[1] > line2[0]:
        if line1[1] > line2[1]:
            return line2
        else:
            return [line2[0], line1[1]]
    else:
        return []
    
def checkOverlab(lst, case):
    if case:
        for i in range(case[0], case[1]):
            lst[i] = True
            
    return lst

def solution(lines):
    answer = 0
    lines.sort()
    tmp = sum(lines, [])
    min_num = min(tmp)
    max_num = max(tmp)
    overlap = [False for _ in range(abs(max_num - min_num))]
    
    case1 = getOverlab(lines[0], lines[1])
    case2 = getOverlab(lines[1], lines[2])
    case3 = getOverlab(lines[0], lines[2])
    
    overlap = checkOverlab(overlap, case1)
    overlap = checkOverlab(overlap, case2)
    overlap = checkOverlab(overlap, case3)
    
    answer = overlap.count(True)
    return answer

 

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