Archives
Recent Posts
«   2025/02   »
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
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[프로그래머스] 겹치는 선분의 길이(Lv.0) - 파이썬 본문

코딩테스트

[프로그래머스] 겹치는 선분의 길이(Lv.0) - 파이썬

Wise-99 2023. 5. 8. 00:09
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

❓ 문제

선분 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

 


 

❓ 입출력 예

lines result
[[0, 1], [2, 5], [3, 9]] 2
[[-1, 1], [1, 3], [3, 9]] 0
[[0, 5], [3, 9], [1, 10]] 8

 


 

✔️ 정답 코드

def solution(lines):
    table = [set([]) for _ in range(200)]
    for index, line in enumerate(lines):
        x1, x2 = line
        for x in range(x1, x2):
            table[x + 100].add(index)

    answer = 0
    for line in table:
        if len(line) > 1:
            answer += 1

    return answer

 

✔️ 코드 해석

table = [set([]) for _ in range(200)]
  • table이라는 배열을 생성한다.
    • a, b의 범위는 -100 ~ 100 까지이므로 200으로 전체 범위를 정한다.
    • set()을 200개 집어넣는다.
  • set()을 이용하여 집합 개념을 사용한다.
    • set은 중복 개념이 없으며 순서가 없다.
  • for문에서 _ 은 인덱스가 필요하지 않을 경우에 사용한다.

 

 

for index, line in enumerate(lines):
        x1, x2 = line
        for x in range(x1, x2):
            table[x + 100].add(index)
  • enumerate(lines)
    • 2차원 배열 lines의 인덱스와 요소를 받는다.
  • x1, x2 = line
    • enumerate로 받은 요소를 x1과 x2에 집어넣는다.
  • table[x + 100].add(index) 
    • table은 200개의 set()이 들어있다.
    • 배열에는 음수 개념이 없으므로 +100으로 음수 부분을 표현한다.
      • 예) -50 표현 = (-50) + 100 = 50
    • 선이 그어진 부분을 표현하기 위해 index를 넣는다.
      • 예) 2차원 배열 lines 중에 0번 라인이 그어져 있다면 인덱스인 0을 table 배열에 추가

 

 

for line in table:
        if len(line) > 1:
            answer += 1
  • table에 저장된 set들을 하나씩 뽑는다.
  • set의 길이가 1을 넘으면 겹치는 부분이므로 answer += 1 을 해준다.