본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] x만큼 간격이 있는 n개의 숫자 문제 풀이 및 설명 - 자바[Java]

by 레일라오리덕 2020. 5. 11.
728x90

https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

https://programmers.co.kr/learn/courses/30/lessons/12954

 

문제

함수 solution은 정수 x와 자연수 n을 입력받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

 

 

제한 사항

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

 

 

결괏값 예시

x n return
2 5 [2,4,6,8,10]
4 3 [4,8,12]
-4 2 [-4, -8]

 

기본 제공 틀

 

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = {};
        return answer;
    }
}

 

풀이 [Java]

 

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

아주 간단한 알고리즘 문제로 볼 수 있습니다.

차근차근 처음부터 설명을 해보자면, 기본 제공 틀에서 long [] answer = {};이라고 선언이 되어 있었는데, 우선 배열에 대한 선언이 필요해 보이네요.

우리는 x=2, n=5라는 값이 들어왔을 때, 길이가 5인 배열이 선언이 되어야 합니다.

그렇기 때문에 위에서 보다시피, long [] answer = new long [n];으로 n이라는 길이의 배열 answer를 선언해주었습니다.

 

자, 배열의 길이를 선언하였으니, 이제 배열에 들어갈 숫자들을 찍어내는 알고리즘이 필요할 것 같은데요.

첫 번째 예상 결과 값을 다시 한번 보자면, x=2, n=5 인 경우, 결과는 [2,4,6,8,10]가 도출되어야 합니다.

 

**저는 늘 for문을 돌릴 때 초기값을 0으로 설정하는 버릇이 있어서 위와 같이 풀어보았는데요.

초기값 i=1로 지정해도 문제가 없다는 점을 유의해주시고 아래 설명을 읽어주세요

값을 1로 지정했을 때 나와야 하는 풀이도 밑에 설명을 해놓았습니다 :D

 

이는 쉽게 말해 [2x1, 2x2, 2x3, 2x4, 2x5]로 볼 수 있는데, 이를 조금 수식으로 표현을 해보자면, [x*1, x*2, x*3, x*4, x*5]로 볼 수 있겠네요!

저는 i=0으로 설정을 하여, x*1에서 1을 (i+1)로 표현했는데, 이는 쉽게 x*i로도 표현이 가능합니다!

 

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

그러려면, 위와 같이, answer의 인덱스를 지정할 때 i-1로 표현하여, answer [0]부터 값을 지정해 줄 수 있도록 해야겠죠?

또한, i < n이 아닌, i <= n으로 지정하여, 1부터 5까지의 인덱스를 표현해 줄 수 있도록 해야 하는 것도 잊지 말아야 할 포인트입니다!

 

채점 결과 [Java]

 


오늘 하루도 알고리즘 공부하느라 수고많으셨습니다!

혹시 제가 틀렸거나 부족한 점이 있다면, 댓글을 달아주세요 :D

728x90

댓글