programmers 4
프로그래머스 문제 풀기
하루에 한 문제씩.
Lv.1 부터 시작해서 언젠간 Lv.3 ~ Lv.4도 풀수 있도록 될 때까지!
Lv.1 x만큼 간격이 있는 n개의 숫자
문제
함수 solution
은 정수 x
와 자연수 n
을 입력 받아,
x
부터 시작해 x
씩 증가하는 숫자를 n
개 지니는 리스트를 리턴해야 합니다.
다음 제한 조건을 보고, 조건을 만족하는 함수, solution
을 완성해주세요.
제한 사항
x
는 -10000000 이상, 10000000 이하인 정수입니다.
n
은 1000 이하인 자연수입니다.
기본 코드
1
2
3
4
5
6
class Solution {
public long[] solution(int x, int n) {
long[] answer = {};
return answer;
}
}
문제 풀이
이번에도 저의 방식대로, 문제를 해석하면서 해결 순서를 구해보겠습니다.
- 입력받은 변수
x
가x
씩 증가한다. - 증가는
n
만큼 해야한다. n
만큼 증가한x
의 리스트를 리턴한다.
정도가 되겠네요!
1번부터 코드로 작성해보겠습니다.
1
2
3
for(int i=0; i<n; i++) {
answer[i] = ...
}
오늘도 for
문이 등장했습니다.
‘기본 코드’를 보시면 배열 answer
가 주어졌습니다.
굳이 answer
를 사용 안하고 다른 배열을 선언해도 되지만, 문제가 원하는 건 ‘리스트’이기 때문에 answer
를 그대로 사용할 것입니다.
배열을 사용하기 위해 i
의 초깃값을 0으로 설정하고, 1씩 증가시킵니다.
언제까지? i
가 n
보다 작을 동안만.
이제 중요한 건 x
가 x
씩 증가한다.입니다.
말이 조금 어렵게 느껴질 수도 있습니다.
다르게 생각해보면 저희가 이미 알고 있는 것과 같은 말입니다.
바로 ‘구구단’입니다.
구구단이라 생각하고 코드를 작성해보면,
1
answer[i] = x * (i+1);
이렇게 작성할 수 있습니다.
하지만 answer
의 데이터 형을 보면 long
방식입니다.
이에 따라 answer
에 데이터를 입력할 땐 long
방식으로 넣어줘야 합니다.
그러니 수정을 해보면,
1
answer[i] = (long)x * (i+1);
이렇게 작성 할 수 있겠죠.
작성한 코드를 자세히 살펴보겠습니다.
x
는 i
가 n
보다 작을 경우. x* (i+1)
를 진행합니다.
(i+1)
로 작성한 이유는 *
곱셈보다 먼저 i
를 1보다 크게 만들기 위해서입니다.
x*0
은 어차피 0이 나오니 실행되는 의미가 없죠.
이렇게 작성하면 x
는 x
만큼 n
번 증가합니다.
증가한 값들은 answer
에 저장됩니다.
for()
문이 끝났을 때, answer
를 바로 리턴해주면 문제 해결입니다.
정답 제출 겸, 정리용으로 최종 코드를 작성해보면.
1
2
3
4
5
6
7
8
9
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
for(int i=0; i<n; i++){
answer[i] = (long)x * (i+1);
}
return answer;
}
}
이렇게 작성할 수 있습니다.
이번 문제는 문제를 잘 이해만 한다면 간단히 풀어낼 수 있는 문제인 것 같습니다.
제가 작성한 방법 말고도 다양한 방법이 있으니 궁금하신 분들은 찾아보시는 게 좋습니다.