
안녕하세요.
오늘은 정답률 48% 겹치는 선분의 길이 문제를 풀어보겠습니다.
처음 문제해결은 부끄럽게 노가다로 완성했네요. 😢
function solution(lines) {
var answer = [];
lines.sort((a,b) => a[0]-b[0]);
if(lines[0][1]>=lines[1][0]){
if(lines[0][1]<=lines[1][1]){
answer.push([lines[1][0],lines[0][1]])
}
else{
answer.push([lines[1][0],lines[1][1]])
}
}
if(lines[0][1]>=lines[2][0]){
if(lines[0][1]<=lines[2][1]){
answer.push([lines[2][0],lines[0][1]])
}
else{
answer.push([lines[2][0],lines[2][1]])
}
}
if(lines[1][1]>=lines[2][0]){
if(lines[1][1]<=lines[2][1]){
answer.push([lines[2][0],lines[1][1]])
}
else{
answer.push([lines[2][0],lines[2][1]])
}
}
switch (answer.length){
case 0 :
return 0;
case 1 :
return answer[0][1]-answer[0][0];
case 2 :
if(answer[0][1]>answer[1][0]){
return answer[1][1]-answer[0][0];
}
else{
return answer[0][1]-answer[0][0]+answer[1][1]-answer[1][0];
}
case 3 :
answer.sort((a,b)=> a[1]-b[1])
let value = answer[0][1]-answer[0][0];
if(answer[0][1]>=answer[1][0]){
value += answer[1][1]-answer[0][1];
if(answer[0][1]>=answer[2][0]){
value += answer[2][1]-answer[0][1];
}
else{
value += answer[2][1]-answer[2][0];
}
}
else{
value += answer[1][1]-answer[1][0];
if(answer[1][1]>=answer[2][0]){
value += answer[2][1]-answer[0][0];
}
else{
value += answer[1][1]-answer[1][0];
value += answer[2][1]-answer[2][0];
}
}
return value
}
}
(추가!!)
이 방법은 좌표가 포함된 위치에 +1을 해준 뒤 2이상이면 두개 이상의 선분이 겹치는 부분이라고 판단해서 겹치는 부분을 구하는 방법인데 생각은 해봤는데 진짜로 되네요..
생각한대로 밀고나가는 연습을 해야겠습니다.
function solution(lines) {
var answer = new Array(200).fill(0);
lines.forEach(([a, b]) => {
for(a;a<b;a++)answer[a+100]+=1
});
return answer.filter(el=>el>1).length;
}
'코테 준비 > [JS] 프로그래머스' 카테고리의 다른 글
프로그래머스 0단계: 정답률 25% - 옹알이(1) (0) | 2024.08.05 |
---|---|
프로그래머스 0단계: 정답률 44% - 평행 (0) | 2024.08.05 |
프로그래머스 0단계: 정답률 50% - 안전지대 (0) | 2024.08.05 |
프로그래머스 0단계: 정답률 53% - 분수의 덧셈 (0) | 2024.08.05 |
프로그래머스 0단계: 정답률 57% - 다음에 올 숫자 (0) | 2024.08.05 |