[코테] 문제풀기 #1

Yuno·2021년 6월 26일
1
post-thumbnail

프로그래머스 문제 풀기

프로그래머스의 2단계 문제를 하나씩 풀 예정이다.
2~3단계는 무난히 풀 수 있는 수준이 되어야 할 것 같다.

이번 문제는 가장 쉬워보여서 골랐다.

다음 큰 숫자

1,000,000 이하의 자연수 n이 주어진다.

다음 큰 숫자는 n보다 큰 자연수이고, 2진수로 변환했을 때 1의 개수가 n과 같다.
조건에 해당하는 숫자 중 가장 작은 숫자이다.

풀이 과정

2진수로 변환하고, 1의 개수를 구하는 getCount() 함수를 만든다.
n에서 1씩 증가하여, 1의 개수가 같은 n보다 큰 자연수를 구한다.

function getCount(n) {
    let binary = n.toString(2);
    const count = binary.split('').filter(v=> v==1).length
    
    return count;
}

function solution(n) {
    let next = n+1;
    const count = getCount(n);

    while(getCount(next) != count) {
        next++;
    }
    
    return next;
}

문제점

처음엔 1의 개수를 구하는 과정에서, n%10, n/10을 반복하여
n의 각 자리수의 1의 개수를 구하였는데, 테스트케이스 1개를 통과하지 못했다.
이유 피드백 부탁드립니다.

크레인 인형뽑기 게임

구현 유형의 문제를 1단계에서도 풀어보았다.

N X N크기의 정사각 격자 게임화면과 바구니가 있다.
게임 화면에 들어있는 모든 인형은 1 X 1 사이즈이다.
크레인이 게임 화면의 인형을 집어, 순서대로 바구니에 쌓는다.
같은 인형 두 개가 바구니에 연속으로 쌓이게 되면, 바구니에서 사라지게 된다.

게임 화면의 인형에 위치를 가르키는 board와, 크레인을 작동시킨 위치 moves가 주어질 때,
바구니에서 사라진 인형의 갯수를 반환하라.

풀이과정

크레인에 위치에 따라 인형을 뽑는다.
뽑은 인형이 바구니의 마지막 인형과 같다면, 결과에 2개를 추가한다.
다르다면 뽑은 인형을 바구니에 넣는다.

function getDoll(board,move) {
    for(const i in board) {
        const row = board[i];
        
        if(row[move-1] != 0) {
            const doll = row[move-1];
            
            board[i][move-1] = 0;
            return doll;
        } 
    }
    
    return null;
}

function solution(board,moves) {
    let count = 0;
    const bucket = [];
    
    for(const move of moves) {
        const doll = getDoll(board,move);
        
        if(doll === null) continue;
        
        if(doll == bucket[bucket.length-1]) {
            bucket.pop();
            count += 2;
        } else {
           bucket.push(doll) 
        }
    }
    
    return count;
}
profile
web frontend developer

0개의 댓글