[programmers] lv.0 겹치는 선분의 길이

jeongjeong2·2023년 1월 24일
0

문제 설명 문제 바로가기

  • 선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.
  • lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.
  • 선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.

제한 사항

lines의 길이 = 3
lines의 원소의 길이 = 2
모든 선분은 길이가 1 이상입니다.
lines의 원소는 [a, b] 형태이며, a, b는 각각 선분의 양 끝점 입니다. -100 ≤ a < b ≤ 100

입출력 예

문제 접근

  • 숫자 겹치는 걸로 확인하면 편리하다.
  • 근데 방문 여부로 풀이해보고 싶어서 풀었다가 시간만 20분 걸림.
  • 방문 여부 false 요소 200개에서 방문하면 true 겹치면 h로 고정한 후 h요소 count해서 출력

나의 풀이

def solution(lines):
    visited = ['F' for i in range(200)]
    for i in lines:
        for j in range(i[0]+100,i[1]+100):
            print(j)
            if visited[j] == 'F':
                visited[j] = 'T'
            elif visited[j] =='T':
                visited[j] = 'H'
            else:
                continue
    print(visited)
    return visited.count('H')

다른 사람 풀이

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])
  • 완전 대박!
  • 양 끝 값 제외하고 list append, 세 개의 list 교집합 개수 출력

0개의 댓글