[lv.0] 겹치는 선분의 길이 | 프로그래머스
[lv.0] 겹치는 선분의 길이 | 프로그래머스
📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)
✏️ (lv.0) : 겹치는 선분의 길이
선분 3개가 평행하게 있다. 세 선분의 시작과 끝 좌표가 주어질 때, 2개 이상의 선분이 겹치는 부분의 길이
를 return하는 solution을 작성하라.
lines
의 길이 = 3,lines
의 원소 길이 = 2- 모든 선분은 길이가
1
이상이다. - 각 단어는 최대 한 번씩만 등장한다.
lines
의 원소는[a, b]
형태이며, a, b는 각각 선분의 양 끝점 이다.- -100 <= a < b <= 100
- 겹치는 선분이 없으면
0
을 return한다.
각 선분이 포함한 숫자가 겹칠 경우 해당 부분이 겹친다고 판단할 수 있다..
- 각 좌표의
a
부터b
까지의 숫자를 쪼개서 저장한 후 다음 좌표의a
부터b
까지의 숫자와 얼마나 일치하는지를 비교한다.Math.min()
,Math.max()
를 활용해 어느 선분이 포함되는지 여부를 고려하지 않을 수 있다. 즉 선분 A와 B중 어느 선분이 포함되는 선분인지 고려하지 않는다는 뜻이다.min + 1
부터max
까지의 값이 곧 선분이 지나간 숫자를 뜻한다. 선분은 항상 1보다 크기 때문에 min 자기 자신은 제외한다.- 각 선분이 지나가는 숫자를
overlap
의 원소item
에 초기화해준다. 기본값은1
로 { 지나가는 숫자:1 }의 형태이다. reduce()
의 인자를 활용해 현재item
과 이전의item
을 비교할 수 있다. 이때 겹치는 숫자가 발생하면 해당 자리의 값에 1을 더해준다. 만약3
이 겹친다면 3을2번
지나간게 되므로{ 3: 2 }
의 형태가 된다.- 이를 반복하여 최종적으로
지나간 횟수가 1 이상인 경우
의 횟수를 return해준다.
1 | function solution(lines) { |
2 | const overlap = lines.reduce((item, [x, y]) => { |
3 | for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) { |
4 | item[i] = item[i] |
5 | ? item[i] + 1 |
6 | : 1; |
7 | } |
8 | |
9 | return item; |
10 | }, {}); |
11 | |
12 | return Object.values(overlap).filter(v => v > 1).length; |
13 | } |
# 프로그래머스
# JS
# javascript
# 코딩테스트
# 알고리즘
👨💻 관련 포스트
[lv.1] 개인정보 수집 유효기간
[lv.1] 개인정보 수집 유효기간
프로그래머스 lv.1 개인정보 수집 유효기간 풀이 with javascript. 해당 문제에서 한달은 28일로 고정이다. 따라서 today와 privacies 각 원소(개인정보)의 날짜를 년, 월, 일에 각 단위에 해당하는 수 * 28을 수행하여 일 단위로 변환한 후 terms에 해당하는 수를 더해 문제를 해결한다.
2023-05-30
[lv.1] 성격 유형 검사하기 | 프로그래머스
[lv.1] 성격 유형 검사하기 | 프로그래머스
프로그래머스 lv.1 성격 유형 검사하기 풀이 with javascript. javascript의 객체를 이용해 성격 유형(이하 MBTI)별 획득 점수를 기록하고 MBTI의 value를 비교해 문제를 해결한다.
2023-06-01
[lv.2] 주차 요금 계산 | 프로그래머스
[lv.2] 주차 요금 계산 | 프로그래머스
프로그래머스 lv.2 주차 요금 계산 풀이 with javascript. javascript의 객체를 이용해 차량의 입/출차 시간을 기록, 해당 객체를 순회하며 주차시간을 주어진 요금표에 맞게 정산하는 것으로 문제를 해결한다.
2023-06-04
💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!