피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.
예를들어
- F(2) = F(0) + F(1) = 0 + 1 = 1
- F(3) = F(1) + F(2) = 1 + 1 = 2
- F(4) = F(2) + F(3) = 1 + 2 = 3
- F(5) = F(3) + F(4) = 2 + 3 = 5
와 같이 이어집니다.2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요
function solution(n) {
let fibo_list = [];
fibo_list[0] = 0;
fibo_list[1] = 1;
fibo_list[2] = 1;
for (let i = 3; i <= n; i++) {
fibo_list[i] = (fibo_list[i-1]%1234567 + fibo_list[i-2]%1234567);
}
return fibo_list[n]%1234567;
}
피보나치 수를 코드로 구현 해본다니 예상은 했지만 수학과 코드의 연관성은 어디까지 가능할 것인지 궁금하다..
그리고 BigInt의 개념도 살짝 알게되었다. 여기서는 익숙치가 않아서 바로 다뤄보지는 않았지만 다음기회가 되면 한 번 적용해 볼 예정이다.
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
- 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
- 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
- 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
function solution(n) {
const originOneLength = n.toString(2).replace(/0/g,"").length;
let answer = n+1
while(answer.toString(2).replace(/0/g, "").length !== originOneLength){
answer++
}
return answer;
}
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.
예를 들어, 문자열 S = baabaa 라면
b aa baa → bb aa → aa →
의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.
//첫번째 풀이법
function solution(s){
let stack = [];
for (let i = 0 ; i < s.length ; i++){
stack.push(s[i]);
if(stack[stack.length-1] === stack[stack.length-2]){
stack.pop()
stack.pop()
}
}
return stack.length > 0 ? 0 : 1;
}
//두번째 풀이법
function solution(s) {
let stack = [];
let prev = '';
for (let i = 0; i < s.length; i++) {
const curr = s[i];
if (curr === prev) {
stack.pop();
prev = stack.length > 0 ? stack[stack.length - 1] : '';
} else {
stack.push(curr);
prev = curr;
}
}
return stack.length > 0 ? 0 : 1;
}
프로그래머스..역시 대중이 없다..처음에 첫번째 풀이법이 효율성이 떨어져서..머리를 굴린 끝에 두번째 풀이법을 시도해봐서 통과과 되어 기뻤는데...다시금 첫번째 풀이법으로 정답을 돌렸더니..무료.두번째 풀이법보다 빠른 속도로..테스트를 통과했다...뭐 때문인지...잘 모르겠지만 한가지 의심되는건 프로그래머스 서버가 불안정하다고 느껴진다...