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