프로그래머스/level 1

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

binaryJournalist 2021. 7. 20. 19:47
반응형

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

등차수열 문제였다.

 

 

** Java

 

 

1)

이건 내 첫번째 풀이였다.

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        for (int i = 0; i < n; i++) {
            answer[i] = Long.valueOf(x) + Long.valueOf(x) * Long.valueOf(i);
        }
        return answer;
    }
}

 

 

위 소스를 보면 자료형 때문에 Long.valueOf 을 쓴 걸 볼 수 있는데

 

애초에 input 을 long 으로 받으면 될 문제였다.

 

2)

그래서 수정한 풀이는 이렇게 되었다.

class Solution {
    public long[] solution(long x, int n) {
        long[] answer = new long[n];
        for (int i = 0; i < n; i++) {
            answer[i] = x + x * i;
        }
        return answer;
    }
}

 

 

 

다른 사람들의 더 좋은 풀이를 보고 고치자면

 

answer[i]의 값은 사실 x 에 x * i 를 더하는 게 아니라 anwer[i - 1] 값에 x를 더하는 것이다.

 

그래야 문제 제목 그대로 x만큼의 간격이 있는 숫자가 된다.

 

따라서 문제 의도에 맞게 소스를 수정한다면

 

class Solution {
    public long[] solution(long x, int n) {
        long[] answer = new long[n];
        answer[0] = x;
        for (int i = 1; i < n; i++) {
            answer[i] = answer[i - 1] + x;
        }
        return answer;
    }
}

 

위와 같이 된다.

 

 

 

 

** Javascript

 

 

나는 정말 간단하게 풀었다.

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

 

 

javascript 의 경우 워낙 기능이 많아서 그런지 기상천외한 풀이들을 볼 수 있다.

 

특히 한 줄로만 끝나는 것들

 

예를 들어

 

function solution(x, n) {
    return Array(n).fill(x).map((v, i) => (i + 1) * v);
}

 

Array(n) : length 가 n인 배열을 만들어준 뒤

.fill(x) :  배열 안의 값을 모두 x로 채우고

.map 을 이용하여 배열 안의 값들을 x + x * index 값으로 가공한다.

 

 

 

다른 풀이로 이렇게도 가능하다.

 

function solution(x, n) {
    return  Array.from({ length: n }, (v, index) => (index + 1) * x);
}

 

Array.from() 으로 length 가 n 인 배열을 만들어 안의 값들은 x + x * index 값으로 가공하여 넣어준다.

 

 

 

function solution(x, n) {
    return (n === 1) ? [x] : [ ...solution(x, n - 1), (x * n)];
}

 

재귀함수의 달인이 되면 위와 같은 식도 가능하다.

 

 

 

코드 한 줄로 위와 같이 멋지게 작성할 수 있지만 속도를 따지면 for문이 가장 빠르다고 한다!

 

 

 

 

** Python

 

def solution(n, m):
    return [n + n * i for i in range(m)]

 

등차수열이 떠오르지 않는가!

반응형