JavaScript/알고리즘

프로그래머스 배열만들기1 JS ( Math.floor(), for문, push() )

hihiha2 2023. 5. 31. 20:21
반응형

문제 설명

정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

 

 

 

✅ 내 코드

function solution(n, k) {
    let num = Math.floor(n/k)
    let list = []
 for (let i=1; i<=num; i++ ) {
    let num2 =(k * i)
    list.push(num2)
 }
    return list
}

 

 

 

🙋‍♀️ 내 생각

처음 문제를 보고 바로 을 이용해야겠다고 생각했다.

예시를 보면 규칙이 k*1 , k*2, k*3 ..몫길이만큼 반복 이런식으로 규칙이 발견됐기 때문이다.

 

그래서 일단은 몫을 구하기위해서 n/k를 해주었다. 

몫의 정수만을 남기기 위해서 Math.floor()를 하고, 몫을 num이라는 이름의 변수에 담았다.

 

그런 다음 for문을 이용해서 1부터 시작해서 몫과 같아질때까지 i를 돌렸다. (배열의 길이가 몫이랑 같기때문)

for문을 돌면서 i를 k와 곱해주었고 그 값을 push를 통해서 다시 list라는 배열에 담았다.

이렇게 하면 i=1부터 시작해서 몫길이만큼 반복한다.

push를 통해서 새로운 배열에 담기때문에 k*1, k*2 ... 이런식으로 반복된다.

 

 

 

 

💻 내가 사용한 메서드

Math.floor(): 항상 내림하고 주어진 숫자보다 작거나 같은 가장 큰 정수를 반환

 

Push():  배열의 끝에 하나 이상의 요소를 추가하고, 배열의 새로운 길이를 반환

- 바로 리턴을 하면 배열의 길이가 나오기때문에 따로 리턴을 해주어야한다.

 

 

💻 학습한것

🔫 JavaScript에서 소수점을 버리고 정수 부분만을 얻을 수 있는 방법

1. Math.floor(): 소수점 이하를 버리고 내림하여 정수를 반환

Math.floor(3.14); // 3
Math.floor(-3.14); // -4

 

2. Math.trunc(): 소수점 이하를 버리고 정수 부분만을 반환합니다. 양수와 음수에 동일하게 적용

Math.trunc(3.14); // 3
Math.trunc(-3.14); // -3

 

3. parseInt(): 문자열을 정수로 변환합니다. 소수점 이하는 자동으로 버려집니다. 기본적으로 10진수로 해석

parseInt("3.14"); // 3
parseInt("-3.14"); // -3

 

4. 비트 연산자 사용: 비트 연산자인 ~~, | 0, << 0 등을 사용하여 숫자를 정수로 변환할 수 있다.

비트 NOT 연산자 ~~가 일반적으로 사용되지만, 코드의 가독성과 혼동을 피하기 위해 다른 방법을 사용하는 것이 좋다.

 

 

다른 방법은 많이 보았고 사용도 해보았지만 이 문제를 풀면서 비트연산자라는 것을 처음으로 알게 되었다.

혼동을 피하기 위해서 다른 메서드를 이용해서 표현하는 것이 더 좋다는 것도 배웠다.

그래도 코드에 나오면 읽을 줄은 아는게 좋을것같아서 공부하였다.

 

 

 

💻  다른사람 코드중에 배울 것

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

나처럼 for문을 사용하고 새로운 배열을 만든것은 같지만, 

초기값 i를 k로 선언하여서, 그 값이 n보다 작거나 같을때까지 k를 더하는 방식으로 식을 세웠다.

이런식으로도 접근할수도 있겠구나하고 공부하였다.

 

이 방법을 이용하면 i<=n의 식에서 1<=n/k가 되기 때문에, 몫을 따로 구하지 않아도 돼서 식이 더 간결해진다.

내가 [k*1, k*2, k*3..] 이런식으로 곱으로 접근했다면

이 방법은 i+k, i+k+k, i+k+k+k  이런식으로 합으로 접근했다.

 

이런 방법을 사용하면 몫을 따로 구하지 않아도 된다는게 좋아보였다.

 

반응형