https://programmers.co.kr/learn/courses/30/lessons/12906
//테스트코드
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class Quiz1_IHateSameNumberTest {
Quiz1_IHateSameNumber q;
@BeforeEach
void setUp() {
q = new Quiz1_IHateSameNumber();
}
@Test
void 한개() {
assertArrayEquals(new int[]{5}, q.solution(new int[]{5}));
}
@Test
void test1() {
assertArrayEquals(new int[]{1, 3, 0, 1}, q.solution(new int[]{1, 1, 3, 3, 0, 1, 1}));
}
@Test
void test2() {
assertArrayEquals(new int[]{4, 3}, q.solution(new int[]{4, 4, 4, 3, 3}));
}
}
//프로덕션코드
import java.util.Stack;
public class Quiz1_IHateSameNumber {
public int[] solution(int[] arr) {
Stack<Integer> stack = new Stack<>();
int lastNumber = -1;
int newNumber;
for (int i = 0; i < arr.length; i++) {
newNumber = arr[i];
if (lastNumber == newNumber) {
continue;
}
stack.push(arr[i]);
lastNumber = stack.peek();
}
int[] answer = new int[stack.size()];
for (int i = answer.length - 1; i >= 0; i--) {
answer[i] = stack.pop();
}
return answer;
}
}
// 성공! 리팩토링하자
// 프로덕션코드
import java.util.Stack;
public class Quiz1_IHateSameNumber {
public int[] solution(int[] arr) {
Stack<Integer> stack = new Stack<>();
int lastNumber = -1;
int newNumber;
deleteNextSameNumber(arr, stack, lastNumber);
int[] answer = new int[stack.size()];
setAnswer(stack, answer);
return answer;
}
private void setAnswer(Stack<Integer> stack, int[] answer) {
for (int i = answer.length - 1; i >= 0; i--) {
answer[i] = stack.pop();
}
}
private void deleteNextSameNumber(int[] arr, Stack<Integer> stack, int lastNumber) {
int newNumber;
for (int i = 0; i < arr.length; i++) {
newNumber = arr[i];
if (lastNumber == newNumber) {
continue;
}
stack.push(arr[i]);
lastNumber = stack.peek();
}
}
}
// 굿 깔끔하고 좋네요!
'코딩테스트연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - JAVA] 문자열 내 마음대로 정렬하기 (0) | 2021.12.16 |
---|---|
[프로그래머스 - JAVA] 크레인 인형뽑기 게임 (0) | 2021.12.14 |
[프로그래머스 - JAVA] 이상한 문자 만들기 (0) | 2021.12.12 |
[프로그래머스 - JAVA] 시저 암호 (0) | 2021.12.08 |
[프로그래머스 - JAVA] 나누어 떨어지는 숫자 배열 (0) | 2021.12.05 |