https://programmers.co.kr/learn/courses/30/lessons/42748
//테스트코드
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class Quiz1_KthNumberTest {
Quiz1_KthNumber q;
@BeforeEach
void setUp() {
q = new Quiz1_KthNumber();
}
@Test
void test1() {
assertArrayEquals(new int[]{5, 6, 3}, q.solution(new int[]{1, 5, 2, 6, 3, 7, 4}, new int[][]{{2, 5, 3}, {4, 4, 1}, {1, 7, 3}}));
}
}
//프로덕션코드
import java.util.Arrays;
public class Quiz1_KthNumber {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for (int i = 0; i < commands.length; i++) {
answer[i] = getNumber(array, commands[i]);
}
return answer;
}
private int getNumber(int[] array, int[] command) {
int lengthOfTruncatedArray = command[1] - command[0] + 1;
int[] truncatedArray = new int[lengthOfTruncatedArray];
for (int i = 0; i < truncatedArray.length; i++) {
truncatedArray[i] = array[command[0] - 1 + i];
}
Arrays.sort(truncatedArray);
return truncatedArray[command[2] - 1];
}
}
// 굿! 코드를 처음 보는 사람도 금방 읽힐 수 있도록 리팩토링!
import java.util.Arrays;
public class Quiz1_KthNumber {
public int[] solution(int[] array, int[][] commands) {
int[] answerArray = new int[commands.length];
getAnswerArray(array, commands, answerArray);
return answerArray;
}
private void getAnswerArray(int[] array, int[][] commands, int[] answerArray) {
for (int i = 0; i < commands.length; i++) {
answerArray[i] = getNumber(array, commands[i]);
}
}
private int getNumber(int[] array, int[] command) {
int lengthOfTruncatedArray = command[1] - command[0] + 1;
int[] truncatedArray = new int[lengthOfTruncatedArray];
getTruncatedArray(array, command[0], truncatedArray);
Arrays.sort(truncatedArray);
return truncatedArray[command[2] - 1];
}
private void getTruncatedArray(int[] array, int i1, int[] truncatedArray) {
for (int i = 0; i < truncatedArray.length; i++) {
truncatedArray[i] = array[i1 - 1 + i];
}
}
}
// 굿! 더 복잡해보이는건 왜일까... 그래도 필요한 부분만 볼 수 있으니까 이게 유지보수하기 더 좋은 코드겠지?
// 클린코드, 오브젝트 책 우선 쭉 읽어보고 어느정도 내공이 쌓였을 때 다시 판단해보자.
'코딩테스트연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - JAVA] 체육복 (0) | 2021.11.28 |
---|---|
[프로그래머스 - JAVA] 완주하지 못한 선수 (0) | 2021.11.27 |
[프로그래머스 - JAVA] 로또의 최고 순위와 최저 순위 (0) | 2021.11.24 |
[프로그래머스 - JAVA] 소수 찾기 (0) | 2021.11.23 |
[프로그래머스 - JAVA] 직사각형 별찍기 (0) | 2021.11.22 |