Post

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;
    }
}

문제 풀이

이번에도 저의 방식대로, 문제를 해석하면서 해결 순서를 구해보겠습니다.

  1. 입력받은 변수 xx씩 증가한다.
  2. 증가는 n만큼 해야한다.
  3. n만큼 증가한 x의 리스트를 리턴한다.

정도가 되겠네요!
1번부터 코드로 작성해보겠습니다.

1
2
3
for(int i=0; i<n; i++) {
    answer[i] = ...
}

오늘도 for문이 등장했습니다.
‘기본 코드’를 보시면 배열 answer가 주어졌습니다.
굳이 answer를 사용 안하고 다른 배열을 선언해도 되지만, 문제가 원하는 건 ‘리스트’이기 때문에 answer를 그대로 사용할 것입니다.
배열을 사용하기 위해 i의 초깃값을 0으로 설정하고, 1씩 증가시킵니다.
언제까지? in보다 작을 동안만.


이제 중요한 건 x x씩 증가한다.입니다.
말이 조금 어렵게 느껴질 수도 있습니다.
다르게 생각해보면 저희가 이미 알고 있는 것과 같은 말입니다.
바로 ‘구구단’입니다.


구구단이라 생각하고 코드를 작성해보면,

1
answer[i] = x * (i+1);

이렇게 작성할 수 있습니다.
하지만 answer의 데이터 형을 보면 long 방식입니다.
이에 따라 answer에 데이터를 입력할 땐 long방식으로 넣어줘야 합니다.
그러니 수정을 해보면,

1
answer[i] = (long)x * (i+1);

이렇게 작성 할 수 있겠죠.
작성한 코드를 자세히 살펴보겠습니다.
xin보다 작을 경우. x* (i+1)를 진행합니다.
(i+1)로 작성한 이유는 *곱셈보다 먼저 i를 1보다 크게 만들기 위해서입니다.
x*0은 어차피 0이 나오니 실행되는 의미가 없죠.
이렇게 작성하면 xx만큼 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;
  }
}

이렇게 작성할 수 있습니다.
이번 문제는 문제를 잘 이해만 한다면 간단히 풀어낼 수 있는 문제인 것 같습니다.
제가 작성한 방법 말고도 다양한 방법이 있으니 궁금하신 분들은 찾아보시는 게 좋습니다.

This post is licensed under CC BY 4.0 by the author.