Level 1) 자연수 뒤집어 배열로 만들기, 문자열 내 p와 y의 개수, 정수 제곱근 판별, x만큼 간격이 있는 n개의 숫자

Doozuu·2023년 2월 2일
0

프로그래머스 (JS)

목록 보기
38/183

📌 문제 1. 자연수 뒤집어 배열로 만들기

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건

n은 10,000,000,000이하인 자연수입니다.


풀이

첫 번째는 반복문을 이용해 풀어주었다.

  1. 숫자를 문자로 바꾸고 배열에 쪼개 담는다.
  2. 반복문에서 마지막 index를 이용해 거꾸로 넣는다.
  3. 다시 숫자로 만든다.
function solution(n) {
    let answer = [];
    let arr = (n+"").split('');
    for(i=arr.length-1;i>=0;i--){
        answer.push(arr[i])
    }
    return answer.map(n => Number(n));
}

두 번째는 reverse( ) 메서드를 이용해서 풀어보았다.

function solution(n) {
    return (n+"").split('').reverse().map(n => parseInt(n));
}

새로운 방식

  1. 주어진 숫자를 10으로 나눈 나머지를 이용해 마지막 자리 숫자를 구한다.
  2. 10을 나누어 마지막 자리 숫자를 제거하고 위의 행위를 반복한다.
function solution(n) {
    var arr = [];

    do {
        arr.push(n%10); // 마지막 자리 숫자
        n = Math.floor(n/10); // 마지막 자리 숫자를 제거하여 다시 실행
    } while (n>0);

    return arr;
}



📌 문제 2. 문자열 내 p와 y의 개수

문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

제한사항

문자열 s의 길이 : 50 이하의 자연수
문자열 s는 알파벳으로만 이루어져 있습니다.


풀이

  1. 대소문자 구분이 필요 없으므로 전부 소문자로 만든다.
  2. 반복문을 이용해 p와 y의 갯수를 센다.
  3. 갯수를 비교한다.
function solution(s){
    let n = s.toLowerCase();
    let p = 0;
    let y = 0;
    for(let e of n) {
        if(e === "p") p++ 
        if(e === "y") y++
    };
    return p === y ? true : false;
}

해당 문자로 split해서 바로 갯수를 세어줄 수도 있다!

function numPY(s){
    return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}

혹은 정규표현식과 match( ) 메서드를 이용해 갯수를 세어줄 수도 있다.

function numPY(s) {
  return s.match(/p/ig).length == s.match(/y/ig).length;
}



📌 문제 3. 정수 제곱근 판별

문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

제한 사항

n은 1이상, 50000000000000 이하인 양의 정수입니다.

입출력 예

n	return
121	144
3	-1

풀이

  1. n의 제곱근을 구한다.
  2. 정수가 아니면 제곱근이 없는 것이므로 -1을 반환, 아니면 제곱근+1 에 제곱한 값을 반환한다.
function solution(n) {
    let sqrt = Math.sqrt(n);
    return sqrt !== parseInt(sqrt) ? -1 : (sqrt+1)**2;
}

정수인지 판별할 때 아래 메서드를 써도 된다.

⭐️ Number.isInteger(value)

function solution(n) {
    let sqrt = Math.sqrt(n);
    return Number.isInteger(sqrt) ? (sqrt+1)**2 : -1;
}



📌 문제 4. x만큼 간격이 있는 n개의 숫자

문제 설명

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

제한 조건

x는 -10000000 이상, 10000000 이하인 정수입니다.
n은 1000 이하인 자연수입니다.

풀이

x씩 증가시키는 부분을 반복문 내부에서 해결하기 어려워서 변수에 따로 x를 담아놓고 더해주는 방식으로 해결하였다.

function solution(x, n) {
    let answer = [];
    let d = x;
    for(i=0;i<n;i++){
        answer.push(x);
        x+=d;
    }
    return answer;
}

x를 더하는 방식이 아닌 i를 곱해주는 방식으로 해결할 수 있다.

function solution(x, n) {
    var answer = [];
    for (let i = 1; i <= n; i++) {
        answer.push(x*i)
    }
    return answer;
}

새로운 풀이

배열에 값을 push하는 방식이 아닌, 배열을 만들어놓고 map으로 값을 업데이트하는 방식으로도 해결할 수 있다.

function solution(x, n) {
    return Array(n).fill(x).map((v, i) => (i + 1) * v)
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글