https://school.programmers.co.kr/learn/courses/30/lessons/120876
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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만큼 겹쳐있습니다.
제출 답안은 없다.
겹치는 선분이 두 개로 나뉘는 경우의 테스트케이스에서 오류가 나는 것 같아서 수정했는데
해당 오류가 아닌 것 같다.
테스트케이스 8/10를 통과했는데 결국 해결하지 못 함.
import numpy as np
def solution(lines):
answer = 0
line1 = [i for i in range(lines[0][0], lines[0][1]+1)]
line2 = [i for i in range(lines[1][0], lines[1][1]+1)]
line3 = [i for i in range(lines[2][0], lines[2][1]+1)]
newline1 = list(set(line1).intersection(line2))
newline2 = list(set(line2).intersection(line3))
newline3 = list(set(line3).intersection(line1))
newline = []
if len(newline1)>=2:
newline += newline1
if len(newline2)>=2:
newline += newline2
if len(newline3)>=2:
newline += newline3
if len(newline)==0:
return 0
newline = list(set(newline))
result = split_consecutive_numbers(newline)
if len(result)==1:
return len(result)-1
else:
return len(result[0])+len(result[1])-2
def split_consecutive_numbers(lst):
result = []
temp = [lst[0]]
for i in range(1, len(lst)):
if lst[i] - lst[i-1] == 1:
temp.append(lst[i])
else:
result.append(temp)
temp = [lst[i]]
result.append(temp)
return result
개선 답안1
- & : 교집합 연산자
- | : 합집합 연산자
def solution(lines):
line1 = set(i for i in range(lines[0][0], lines[0][1]))
line2 = set(i for i in range(lines[1][0], lines[1][1]))
line3 = set(i for i in range(lines[2][0], lines[2][1]))
return len((line1&line2) | (line1&line3) | (line2&line3))
개선 답안2
def solution(lines):
answer = 0
count = [0 for _ in range(200)] # -100 ~ 100 까지의 범위에서 해당 점에 선분이 그어진 횟수
for line in lines:
for i in range(line[0], line[1]):
count[i + 100] += 1
answer += count.count(2) # 두 개 이상 겹친 점
answer += count.count(3) # 세 개 이상 겹친 점
return answer
참고 자료
https://school.programmers.co.kr/learn/courses/30/lessons/120876/solution_groups?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 | 겹치는 선분의 길이 [파이썬 python]
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def
dduniverse.tistory.com
'알고리즘 > Python' 카테고리의 다른 글
[Python | SWEA] 2001. 파리 퇴치 (0) | 2023.05.04 |
---|---|
[Python | SWEA] 1961. 숫자 배열 회전 (0) | 2023.05.03 |
[Python | SWEA] 1966. 숫자를 정렬하자 (0) | 2023.05.01 |
[Python | SWEA] 1948. 날짜 계산기 (0) | 2023.05.01 |
[Python | SWEA] 1979. 어디에 단어가 들어갈 수 있을까 (0) | 2023.04.30 |