문제
https://school.programmers.co.kr/learn/courses/30/lessons/120868
해설
function solution(sides) {
let answer = [];
//오름차순 정렬
const [a, b] = sides.sort((a, b) => a - b);
//가장 긴 변이 b인 경우
for (i = b + 1 - a; i <= b; i++) {
answer.push(i);
}
//나머지 한 변이 가장 긴 경우
for (i = b + 1; i < a + b; i++) {
answer.push(i);
}
//중복 제거
answer = [...new Set(answer)];
return answer.length
}
다른 풀이
삼각형을 만들기 위한 조건은 가장 긴 변의 길이가 다른 두 변의 길이의 합보다 작아야 한다는 점을 수학 공식으로 이해해 보자
가장 긴 변의 길이 < 다른 두 변의 길이의 합
function solution(sides) {
return Math.min(...sides)*2-1
}
세 변의 길이를 a,b,c 라고 가정해보자.
1. a > b, a가 가장 긴 변일때
a>= c , 두 변의 길이의 합보다 작아야 하니 a < b + c 여야 한다.
수식을 정리하면 a>= c, a < c +b 이고, a-b < c <= a 이다. c의 개수는 a - (a-b) = b 개
2. c가 가장 긴 변일때 , a > b
c>= a , 두 변의 길이의 합보다 작아야 하니 c< b + a 여야 한다.
수식을 정리하면 c>= a , c< b + a 이고, a = < c < a + b 이다. c의 개수는 (a + b) - a = b 개
3. c = a가 같을때, a> b
c = a , c < a+b 이다. 결국 이 케이스는 0 < b 로 되니 a = c가 같을 때만 성립하는 1가지 경우이다.
다만, 이 경우는 앞에서 a>=c, c>=a 인 경우에 포함된다.
따라서 수식으로 정리하면 b * 2 -1(a와c가 같은 경우, 중복 제거) 로 볼 수 있다.
'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글
프로그래머스, 자바스크립트) 무작위로 K개의 수 뽑기 (0) | 2024.03.03 |
---|---|
프로그래머스, 자바스크립트) 수열과 구간 쿼리 2 (0) | 2024.03.03 |
프로그래머스, 자바스크립트) 배열 만들기 6 (0) | 2024.02.26 |
프로그래머스, 자바스크립트) 구슬을 나누는 경우의 수 (0) | 2024.02.25 |
프로그래머스, 자바스크립트) 배열 만들기 4 (0) | 2024.02.25 |