Algorithm/Javascript

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

보라해바라기 2023. 7. 27. 15:03
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