https://programmers.co.kr/learn/courses/30/lessons/12954
//테스트 코드
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);
}
}
}
// 거의 유사하긴 한데 읽기 더 쉽긴 할 것 같다! 성공!
'코딩테스트연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - JAVA] 소수 찾기 (0) | 2021.11.23 |
---|---|
[프로그래머스 - JAVA] 직사각형 별찍기 (0) | 2021.11.22 |
[프로그래머스 - JAVA] 행렬의 덧셈 (0) | 2021.11.20 |
[프로그래머스 - JAVA] 핸드폰 번호 가리기 (0) | 2021.11.19 |
[프로그래머스 - JAVA] 하샤드 수 (0) | 2021.11.18 |