ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 1단계 탐욕법 후기.
    알고리즘 2022. 2. 18. 13:35
    function solution(n, lost, reserve) {

        const arr = [];

        for(let i=0; i<lost.length; i++) {
            for(let j=0; j<reserve.length; j++) {
                if(lost[i] == reserve[j]) arr.push(lost[i]);
            }
        }

        console.log(arr);
        // const set = new Set(arr);
        // console.log(set)

        arr.forEach(a => {
            const target1 = lost.findIndex(item => item === a);
            lost.splice(target1, 1);

            const target2 = reserve.findIndex(item => item === a);
            reserve.splice(target2, 1);
        });

        console.log(lost);
        console.log(reserve);

        lost.sort((a, b) => a - b);
        reserve.sort((a, b) => a - b);

        let cnt = 0;
        let x = lost.length;

        for(let j=0; j<lost.length; j++) {

            let a = false;

            for(let k=0; k<reserve.length; k++) {

                if(lost[j] == reserve[k] - 1 || lost[j] == reserve[k] + 1) {
                    console.log('??: ' + lost[j] + " " + reserve[k]);
                    cnt ++;
                    lost.splice(j, 1);
                    reserve.splice(k, 1);
                    a = true;
                    break;
                };
            }
            if(a) j --;
        }

        var answer = n - x + cnt;
        return answer;
    }


    console.log(solution(5, [3, 1], [2, 4]));
     
     
     
    물론 고수분들은 더 간략하게 풀테지만,
     
    일단 알고리즘의 90퍼는 완성해놓고 계속 두 테스트 케이스만 오답이 나와서
     
    계속 끙끙대다가 결국 혼자서 해결했다.
     
     
     
    핵심은 문제를 다시 한번 천천히 읽어보는것이었는데,
     

    "" 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요. ""

    이 문장이 핵심이었다.

     

     

    그냥 해를 구하는걸 넘어서 최댓값을 구해야했으므로

     

    lost와 reserve 배열이 순서대로 정렬이 되었어야했다.

     

     

    예를 들면 solution 함수를 호출할 때 인자로 

     

    5, [1, 3], [2, 4] 요렇게 넣으면 두 배열의 요소들이 모두 서로 상쇄가 된다.

     

     

    하지만 5, [3, 1], [2, 4] 이렇게 주어진다면...

     

    3이 2를 상쇄하고 남은 1은 4를 상쇄할 수 없기에

     

    같은 요소가 들어있는 배열이라도 넣어진 순서에 따라 최댓값이 출력되지않을 수 있었다.

     

     

    따라서 두 배열을 sort로 정렬하는 로직을 넣어 해결할 수 있다.

Designed by Tistory.