[매일코딩-프로그래머스] x만큼 간격이 있는 n개의 숫자

2022. 1. 13. 10:45WEB Dev/CordingTEST

728x90

 

오늘은 직사각형 별찍기 옆에 있는 문제를 풀어보자 (~ ̄▽ ̄)~

 


 

[문제] x만큼 간격이 있는 n개의 숫자

 

우선 숫자를 두 개 준다. 각각 x와 n으로 넘겨주고, x부터 시작해 x씩 증가하는 숫자를 n개 가지는 배열을 리턴하는 함수를 가지게 된다.

조건은 x는 -10000000 이상 10000000 이하의 정수고, n은 1000 이하의 자연수이다.

 

 

[풀이]

 

 

처음에는 제한조건을 완전히 무시하고 풀었었는데, 이것도 문제의 일부분이라 조건을 잘 맞춰야 하더라.

 

자바스크립트는 자연수와 정수를 크게 구분하지 않는 것으로 알고 있는데 (아닐수도 있습니다!!!)

메소드를 찾아보니 정수인지 아닌지 판별하는 메소드가 있었다.

 

Number.isInteger()

 

Number.isInteger() - JavaScript | MDN

Number.isInteger() 메서드는 주어진 값이 정수인지 판별합니다.

developer.mozilla.org

 

이 메소드는 익스플로러는 지원을 하지 않기 때문에 ^^ 해당 숫자를 1로 나누어서 나머지가 0이 되는지 확인하는 판별식을 사용할 수도 있다.

 

 

 

[Javascript] 숫자가 정수인지, 실수인지 체크하는 2가지 방법

Javascript에서 값이 정수인지 실수인지 체크하는 2가지 방법을 소개합니다. Number.isInteger() 함수 나머지 연산자(%) 활용 1. Number.isInteger() 함수 document.writeln(Number.isInteger(10)); // true docum..

hianna.tistory.com

 

 

그리고 자연수는 0이 아닌 양의 정수이기 때문에 0이 아니고 0보다 작지 않은 수를 1로 나눴을 때 나머지가 0인지 판별하면 되겠다.

 

 

 

조건식 작성

 

우선 주어진 조건에 맞게 식을 작성해보자.

 

x의 범위를 확인하고, x가 정수인지 확인하고, n의 범위를 확인하고, n이 정수인지 확인해주자.

 

 

function solution(x, n) {
    var answer = [];
    
    if(-10000000 <= x <= 10000000 && x % 1 == 0 && 0 < n <= 1000 && n % 1 == 0){
        
    }
    
    return answer;
}

 

 

좀 조건이 많이 정신없이 적힌 것 같지만 x의 범위와 정수 판별식, n의 범위와 n 정수 판별식이 들어있다.

이 모든 것이 통과되어 true가 되면 내부 식이 실행될 수 있도록 && AND로 작성하였다.

 

그리고 반복문을 통해 n개의 값이 answer 배열 안에 들어가도록 해보자.

 

 

배열 만들기

 

 

처음 생각난건 변수 i를 정해 answer 배열에 반복해서 값을 넣어주는 것인데, x 부터 시작해 x만큼 증가하려면 x 씩 더해야 할 것 같았다.

 

function solution(x, n) {
    var answer = [];
    
    if(-10000000 <= x <= 10000000 && x % 1 == 0 && 0 < n <= 1000 && n % 1 == 0){
        
        for(let i=1; i<=n; i++){
            answer.push(x)
            x += x;
        }        
    }
    
    return answer;
}

 

 

일단 if 문은 정상적으로 통과했지만 값이 전혀 맞지 않았다. 3은 왜 통과한거지 ㅋㅋㅋㅋㅋ

 

 

 

값이 2씩 늘어야 하는데, 배수로 늘고 있었다. x가 초기화되어야 할 것 같다.

 

 

function solution(x, n) {
    var answer = [];
    var i=0;
    if(-10000000 <= x <= 10000000 && x % 1 == 0 && 0 < n <= 1000 && n % 1 == 0){
        
       while(i<n){  
           answer.push(x)
           x += x
           i++
       }      
    }
    
    return answer;
}

 

 

while로 바꿔도 뾰족한 수가 없네... 싶었는데 생각해보니 이거 구구단같이 곱셈으로 처리하면 될 것 같았..다!

 

 

그래서 아래와 같이 i를 1부터 시작하도록 하고, n번 반복하며, push해줄 때 i를 곱해주면 되었다.

 

 

function solution(x, n) {
    var answer = [];
    var i=1;
    if(-10000000 <= x <= 10000000 && x % 1 == 0 && 0 < n <= 1000 && n % 1 == 0){
        
       while(i<=n){  
           answer.push(x*i)
           i++
       }      
    }
    
    return answer;
}

 

 

결과는...

 

 

 

 

 

 

히히 좋구만

👍😊

 


728x90