개발계발
프로그래머스 - 겹치는 선분의 길이(120876) 본문
문제 설명
제한사항
접근방식
- 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))
'알고리즘' 카테고리의 다른 글
프로그래머스 - 교점에 별 만들기(87377) (1) | 2024.04.26 |
---|---|
프로그래머스 - 옹알이(1) (120956) (2) | 2024.04.23 |
프로그래머스 - 주사위 게임3(181916) (0) | 2024.04.23 |
프로그래머스 - 안전지대(120866) (0) | 2024.04.23 |
프로그래머스 - 분수의 덧셈(120808) (0) | 2024.04.23 |