[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
💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!