고양이와 코딩
[프로그래머스] 12월26일 ~ 12월30일 본문
728x90
12월26일
숫자의 표현
내 풀이
function solution(n) {
let answer = 0;
let start = 1;
let sum = 0;
while (start <= n) {
for (let i = start; ; i++) {
sum += i;
if (sum === n) {
answer++;
break;
} else if (sum > n) {
break;
}
}
sum = 0;
start++;
}
return answer;
}
이렇게 제출했는데.. 시간 초과가 납니다.. ㅠㅠ 다른 방법을 찾아봐야겠네요
12월27일
다음 큰 숫자
내 풀이
function solution(n) {
const nBinaryString = n.toString(2).replace(/0/g, ' ');
const oneCount = nBinaryString.replace(/\s/g, '').length;
for (let i = n + 1; ; i++){
const iBinaryString = i.toString(2).replace(/0/g, ' ');
const oneCountI = iBinaryString.replace(/\s/g, '').length;
if(oneCount === oneCountI) {
return i;
}
}
}
피보나치 수
첫 번째 풀이
function solution(n) {
const fibonacci = (n) => {
if (n === 0) {
return 0;
} else if (n === 1) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
return fibonacci(n) % 1234567;
}
이렇게 풀었더니 테스트케이스 7번부터 무한로딩이 되었다... 뭐가 문제인지 찾아보았다!
너무 딱 맞춰서 머쓱할정도 ㅎㅎ ^^;; 재귀 호출을 하면 런타임 에러가 나나보다. 반복문으로 고쳐보자
function solution(n) {
if (n === 0) {
return 0;
} else if (n === 1) {
return 1;
}
let a = 0;
let b = 1;
let result = a + b;
let count = 2;
while (count <= n){
result = a + b;
a = b;
b = result;
count++
}
return result % 1234567;
}
이건 틀렸습니다! 가 뜨네요.....ㅠㅠ...
최종 코드
function solution(n) {
if (n === 0) {
return 0;
} else if (n === 1) {
return 1;
}
let a = 0;
let b = 1;
let result = 0;
let count = 2;
while (count <= n) {
result = (a + b) % 1234567;
a = b;
b = result;
count++;
}
return result;
}
12월28일
문자열 내 p와 y의 개수
내 풀이
function solution(s){
let UpperS = s.toUpperCase().split('');
let foundP = 0;
let foundY = 0;
for(let i = 0; i < UpperS.length; i++){
if(UpperS[i] === "P"){
foundP++;
} else if (UpperS[i] === "Y"){
foundY++;
}
}
return foundP === foundY ? true : false;
}
다른 사람의 풀이
function numPY(s){
return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}
........
12월29일
x만큼 간격이 있는 n개의 숫자
처음 풀이
function solution(x, n) {
var answer = [];
for (let i = x; i <= x * n; i+=x){
answer.push(i);
}
return answer;
}
이 경우는 x가 음수인 경우를 고려하지 못한다. (+= x 라고 해도 -4 + (-4)니까 괜찮을거라고 생각함..)
제출 코드
function solution(x, n) {
const answer = [];
for (let i = 0; i < n; i++) {
answer.push(x + x * i);
}
return answer;
}
자릿수 더하기
내 풀이
function solution(n){
let sum = 0;
let arrN = n.toString().split('');
arrN.forEach((value) => {
sum += Number(value);
})
return sum;
}
다른 사람의 풀이
function solution(n){
// 쉬운방법
return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
}
reduce를 사용했고, 자바스크립트의 형변환을 이용해서 n + "" 을 사용하셨다!
12월30일
자연수 뒤집어 배열로 만들기
내 풀이
function solution(n) {
const answer = [];
const reversed_n = n.toString().split('').reverse();
reversed_n.forEach((value, index) => {
answer.push(Number(value));
})
return answer;
}
아 나도 한줄풀이!! 할 수 있을 것 같았는데 ...ㅠㅅ ㅜ...
다른 사람의 풀이
function solution(n) {
return (n + '').split('').reverse().map(n => parseInt(n));
}
정수 제곱근 판별
내 풀이
function solution(n) {
const number = Math.sqrt(n);
return Number.isInteger(number) ? (number + 1) ** 2 : -1;
}
return문에서 조건을 판별할때 Math.sqrt(n) 이렇게만 사용하면 0이 아닌 모든 숫자에 대해 참으로 간주되기 때문에
정수임을 판별하는 Number.isInteger 함수를 사용 해 줘야한다. 제곱근이 정수인 경우에 그 제곱근 값이 무조건 정수가 되기 때문에 ㅎㅎ
'javascript' 카테고리의 다른 글
[프로그래머스] 1월8일 ~ 1월14일 (1) | 2024.01.08 |
---|---|
[프로그래머스] 1월2일 ~ (0) | 2024.01.03 |
[프로그래머스] 게임 맵 최단거리(BFS) (0) | 2023.12.26 |
[프로그래머스] 12월18일 ~ 12월25일 (0) | 2023.12.18 |
[프로그래머스] 정수를 나선형으로 배치하기 (1) | 2023.12.17 |