-
[알고리즘/자바스크립트] 삼각형 판별문제 (Is this a triangle?)Algorithm 2019. 2. 18. 21:55
-해당 문제는 codewars사이트의 level7 문제입니다. (1~8단계 중 8단계가 가장 쉬운 레벨)-
[문제] Implement a method that accepts 3 integer values a, b, c. The method should return true if a triangle can be built with the sides of given length and false in any other case.
(In this case, all triangles must have surface greater than 0 to be accepted).Test.describe("PublicTest", function() {Test.assertEquals(isTriangle(1,2,2), true);Test.assertEquals(isTriangle(7,2,2), false);});[해석] 파라미터로 들어가는 a, b, c는 각각 삼각형 변의 길이가 될 숫자이다. 그 3개의 숫자로 삼각형이 만들어지면 true를 return하고 삼각형이 만들어지지 않는 숫자면 false를 return하라. (모든 삼각형은 0보다 큰 면적을 가질 수 있어야 한다.)
음... 삼각형이 이루어지려면... 어떻게 되야하지... 아무 생각이 안들어서 인터넷에 삼각형에 대해서 검색해봤다.
그랬더니 초딩 중딩때 배웠던 개념들이 쭉 나왔다. 나 초딩, 중딩 때 공부 열심히 했었는데 왜 지금 하나도 생각이 안날까..흑흑ㅠㅠ
하여튼 삼각형이 만들어지려면 제일 큰 변의 길이가 나머지 두 변의 길이의 합보다 작아야한다.
생각해보니 너무 당연한 얘기라 허무하네.
생각해보니 나머지 두 변의 길이의 합보다 크면 삼각형 자체가 연결이 안되니까 안만들어지겠지..
이런 당연한 것도 몰라가지고 검색을 하다니ㅜㅜㅜㅜㅜㅜㅜㅜ 살짝 현타가 왔지만 일단 코드는 짜보기로 했다.
첨에 코드를 짜려고 했을 때 뭔가 너무 어렵게 생각을 했던 것 같다.
일단 제일 긴 변의 길이를 구해야하니 3개 숫자 중 최대값을 구해야하고
나머지 숫자들은 더해서 비교를 해야하는데...
function isTriangle(a,b,c) { var arr = [a, b, c] var max = arr[0] var sum = 0; for(var i in arr) { if(arr[i] > max) { max = arr[i] } else { sum += arr[i] } } if(max < sum) return true else return false }
일단 이렇게 복잡하게 코드를 짰었다.
a, b, c를 배열로 만들어서 최대값을 구하고
최대값 아닌 애들은 더하는걸로 만들었는데
여기엔 엄청난 오류가 있다.
만약에 isTriangle(7, 2, 2)라는 숫자가 들어가면
max의 초기값은 7이 된다.
그리고 for문으로 값들을 7과 비교를 하는데
for문의 첫번째값인 arr[0]이 7이므로 if문 첫번째 조건식에서 false가 되니
else문으로 빠져서 sum에 7이 더해져버린다! 7이 최대값인데!
여기서 막혀서 멍때리다가
너무너무너무 쉽게 풀 수 있는 문제라는 사실을 깨달았다ㅋㅋㅋㅋ
a+b+c를 더한 값에서 a, b, c의 최대값을 빼면
나머지 두 변의 길이의 합이 자연스럽게 구해지지 않겠음?ㅋㅋ
아 왜 이런 쉬운걸가지고 20분을 넘게 고민했지ㅠㅠ..
function isTriangle(a,b,c) { var max = Math.max(a, b, c) var sum = (a + b + c) - max; if(max < sum) return true else return false }
그래서 나온 결과는 이렇다.
일단 Math.max()는 최대값을 구해주는 내장함수이다.
일단 최대값을 구해놓고
a + b + c 에서 max를 뺀다.
그리고 max가 sum보다 작으면 true, 반대의 경우엔 false를 return해준다.
통과 성공!
반응형'Algorithm' 카테고리의 다른 글
[알고리즘/자바스크립트] 트리보나치 수열 구하기 (Tribonacci Sequence) (0) 2019.02.20 [알고리즘/자바스크립트] 홀수 짝수 판별하여 map()으로 배열 재구성하기 (WeIrD StRiNg CaSe) (0) 2019.02.19 [알고리즘/자바스크립트] 완벽한 제곱근 구하기 (Find the next perfect square!) (0) 2019.02.18 [알고리즘/자바스크립트] 마지막 4글자 제외하고 #으로 치환하기 (Credit Card Mask) (0) 2019.02.17 [알고리즘/자바스크립트] 특정문자 공백으로 치환해서 return하기 (Dubstep) (252) 2019.02.17 COMMENT