코딩테스트연습/프로그래머스

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

:)jun 2021. 11. 21. 20:41

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

 

코딩테스트 연습 - x만큼 간격이 있는 n개의 숫자

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

programmers.co.kr

//테스트 코드

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class Quiz1_x만큼간격이있는n개의숫자Test {
	Quiz1_x만큼간격이있는n개의숫자 q;

	@BeforeEach
	void setUp() throws Exception {
		q = new Quiz1_x만큼간격이있는n개의숫자();
	}

	@Test
	void test1() {
		assertArrayEquals(new long[] {2,4,6,8,10}, q.solution(2, 5));
	}
	@Test
	void test2() {
		assertArrayEquals(new long[] {4,8,12}, q.solution(4, 3));
	}
	@Test
	void test3() {
		assertArrayEquals(new long[] {-4,-8}, q.solution(-4, 2));
	}
	@Test
	void test4() {
		assertArrayEquals(new long[] {-1}, q.solution(-1, 1));
	}

}


// 프로덕션 코드


public class Quiz1_x만큼간격이있는n개의숫자 {
	public long[] solution(int x, int n) {
        long[] answer = new long[n];
        for(int i=0; i<n; i++) {
        	answer[i]=x*(i+1);
        }
        return answer;
    }	
}

// 히든테스트 실패! 고려하지 못한 부분이 뭘까?

public class Quiz1_x만큼간격이있는n개의숫자 {
	public long[] solution(long x, int n) {
        long[] answer = new long[n];
        for(int i=0; i<n; i++) {
        	answer[i]=x*(i+1);
        }
        return answer;
    }	
}

// 최댓값인 int x 와 int n 의 곱은 int의 범위를 벗어나기 때문에 스택오버플로우.
// 하나를 형변환해서 (long) -> 곱셈을 했을때 자동 형변환으로 long타입이 나오도록 바꿔야한다.


public class Quiz1_x만큼간격이있는n개의숫자 {
	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;
    }	
}

// 성공! 처음보는 사람도 쉽게 읽을 수 있도록 리팩토링해보자!


public class Quiz1_x만큼간격이있는n개의숫자 {
	public long[] solution(int x, int n) {
        long[] answer = new long[n];
        makeArray(x, n, answer);
        return answer;
    }

	private void makeArray(int x, int n, long[] answer) {
		for(int i=0; i<n; i++) {
        	answer[i]=(long)x*(i+1);
        }
	}	
}

// 거의 유사하긴 한데 읽기 더 쉽긴 할 것 같다! 성공!