codingTest

프로그래머스 풀이 삼각형의 완성조건 (1)

에밀오구 2023. 4. 1. 20:48

문제: https://school.programmers.co.kr/learn/courses/30/lessons/120889

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

//내풀이
function solution(sides) {
    //입 : 세변 길이가 담긴 sides  [1,2,3]
    //출 2 or 1 
    //sides ->가장 큰 수와 인덱스 번호 찾기 [수,인덱스]  
    //두변의 합 더하기  sides.reduce(()=>{}); 
    //두변의 합 가장큰수 비교 크거나 같으면 2 아니면 0 리턴 

    //[3,6,2]
   let max = sides[0];//3
    let indexMax =0; //0
    
    sides.map((x,idx)=>{
        if(max<x){
            max = x; //6
            indexMax= idx; //1
        }});
   
    
    let sum = sides.reduce((acc,cur,id)=>{
        if(indexMax!==id){//6!==3 
       return cur + acc;     //0+3 acc= 3  5
        }else{
            return acc; //3
        }
    },0);
    //console.log(sum);
    
    if(sum>max){
        return 1;
    }else{
        
        return 2;
    }
}

이 문제는 예전에 테스트 통과는 했지만 제출통과가 안되서 원인을 못찾다가 뒤로 미뤄둬던 문제였습니다.  원인은 최댓값이 아닌 숫자를 찾을 때 인덱스로 비교하며 찾았어야 했는데 최댓값과 숫자 비교로 찾았기 때문이였습니다.  결국 최대값이 두개 인 경우의 테스트에 통과가 되지 않았습니다.  지금 당장 막히는 지식과 어려움도 조금 숨을 고르고 나중에 문제를 바라보면 언젠가는 해결할 수 있다는 생각이 증명된 하루 였습니다. 그리고 그전에 막혔던 어려움을 외면하는 것이 아니라 숨을 고르고 꼭 다시 바라보는 자세가 중요하다고 생각했습니다.  

//다른 사람 풀이
function solution(sides) {
    var answer = 0;
    const max = Math.max(...sides); // 유용할 것 같 은 방식
    const sum = sides.reduce((a,b) => a + b, 0) - max;

    answer = max < sum? 1 : 2;

    return answer;
}

Math.max()

//Math.max() 씹고뜯고 맛보고 즐기기 
// 함수는 입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환
console.log(Math.max(1,2,-1));//2

console.log(Math.max(-1, -3, -2)); 
// Expected output: -1

console.log(Math.max(   )); //-infinity

console.log(Math.max( "1","2")); //숫자 2반환

let num = Math.max("1","2");
console.log(typeof num); // number

아마 Math.max()는 스프레드 문법이랑 많이 사용되지 않을 까 생각됩니다.