프로그래머스의 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;
}