출처: 프로그래머스 코딩 테스트 연습, 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)]
등차수열이 떠오르지 않는가!
'프로그래머스 > level 1' 카테고리의 다른 글
[프로그래머스] 정수 제곱근 판별 (0) | 2021.07.22 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.07.21 |
[프로그래머스] 문자열 내림차순으로 배치하기 (0) | 2021.07.21 |
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2021.07.21 |
[프로그래머스] 직사각형 별찍기 (0) | 2021.07.20 |