[프로그래머스] 230727 코딩테스트 연습

    SMALL

    1. 배열 만들기 6

    function solution(arr) {
        var stk = [];
        
        stk.push(arr[0]);
        
        for (let i=1; i<arr.length; i++) {
            if (stk[stk.length-1] == arr[i]) {
                stk.pop();
            } else { // (stk[stk.length-1] != arr[i])
                stk.push(arr[i]);
            }
        }
        
        if (stk.length == 0) {
            stk.push(-1);
        }
        
        return stk;
    }

     

    2. 무작위로 k개의 수 뽑기

    function solution(arr, k) {
        var answer = [];
        let temp = [];
        
        // 중복 값 없앤 배열
        arr.forEach( i => {
            if (!temp.includes(i)) {
                temp.push(i);
            }
        })
        
        for (let v=0; v<k; v++) {
            if (temp[v] == null) {
                answer.push(-1)
            } else {
                answer.push(temp[v]);
            }
        }
        
        return answer;
    }

     

    3. 배열의 길이를 2의 거듭제곱으로 만들기

    // 다른 사람들 풀이를 보니, Math.log2()를 사용한 풀이 多
    
    function solution(arr) {
        var answer = [];
        let length = 1;
        
        while (true) {
            if (length < arr.length) {
                length = length*2;
            } else {
                break;
            }
        }
        
        for (let i=0; i<length; i++) {
            if (arr[i] == null) {
                answer.push(0);
            } else {
                answer.push(arr[i]);
            }
        }
        
        return answer;
    }

     

    4. 배열 비교하기

    function solution(arr1, arr2) {
        var answer = 0;
        let arr1Sum = 0;
        let arr2Sum = 0;
        
        // 합 계산
        arr1.forEach( i => {
            arr1Sum += i;
        })
        arr2.forEach( j => {
            arr2Sum += j;
        })
        
        // 조건식
        if (arr1.length > arr2.length) {
            answer = 1;
        } else if (arr1.length < arr2.length) {
            answer = -1;
        } else { // arr1.length == arr2.length
            if (arr1Sum > arr2Sum) {
                answer = 1;
            } else if (arr1Sum < arr2Sum) {
                answer = -1;
            } else { // arr1Sum == arr2Sum
                answer = 0;
            }
        }
        
        return answer;
    }

     

    5. 배열의 길이에 따라 다른 연산하기

    function solution(arr, n) {
        var answer = [];
        
        if (arr.length%2==1) { // 홀수
            arr.forEach( (v,i) => {
                if (i%2==0) {
                    v += n;
                }
                answer.push(v);
            })
        } else { // 짝수
            arr.forEach( (v,i) => {
                if (i%2==1) {
                    v += n;
                }
                answer.push(v);
            })
        }
        
        return answer;
    }

     

    6. 뒤에서 5등까지

    function solution(num_list) {
        var answer = [];
        
        // 그냥 sort()로 정렬 시, 문자열 정렬
        // **숫자를 기준으로 정렬
        num_list.sort( (a,b) => a - b );
        answer = num_list.slice(0, 5);
        
        return answer;
    }

     

    7. 문자열 묶기

    // dictionary {key: value} 사용
    // key: 문자열 길이, value: 문자열 목록
    
    function solution(strArr) {
        var answer = 0;
        let res = {} // 딕셔너리 객체
        
        strArr.forEach( i => {
            const length = i.length;
            // ** 널 병합 연산자 (??) 
            // 왼쪽 피연산자가 null/undefined일 때 오른쪽 피연산자를 반환
            // 그렇지 않으면 왼쪽 피연산자를 반환
            
            res[length] = res[length] ?? []
            // 이전 i가 담긴 딕셔너리가 있으면, 그 곳에 i를 담는다.
            // 현재 i가 처음 나온 값이면, 빈 딕셔너리에 담는다.
            
            res[length].push(i);
        })
        
        // 각 res 값에 대해 길이 구하기
        const values = Object.values(res).map(a => a.length);
        // 같은 값이 가장 많은 
        answer = Math.max(...values);
        
        return answer;
    }

     

     

    728x90

    댓글