Backend
home
🧱

[프로그래머스] 같은 숫자는 싫어

생성일
2025/03/08 05:38
태그
Programmers
게시일
2025/03/08
최종 편집 일시
2025/03/08 06:00

문제

해결 방안 고민

중복을 허용하지 않으면서 반환할 때는 그 순서를 유지해야 하는 조건을 충족시켜야 하는 문제이다.

해결 방법

1번째 방법
continue와 arr[i-1], arr[i] 의 요소를 활용하여 해결하였다.
2번째 방법
향상된 for문 + temp 변수 활용하여 해결하였다.
3번째 방법
Stack만 활용하여 해결하였다.

코드

1번 코드 - 배열 조건 + continue
package algo250308; import java.util.*; // 같은 숫자는 싫어 - Lv1 (continue 활용) public class Pro12906 { public int[] solution(int[] arr) { Stack<Integer> stack = new Stack<>(); int length = arr.length; for (int i = 0; i < length; i++) { if (!stack.isEmpty() && arr[i - 1] == arr[i]) { continue; } else { stack.push(arr[i]); } } int size = stack.size(); int[] answer = new int[size]; for (int i = size - 1; i >= 0; i--) { answer[i] = stack.pop(); } return answer; } }
Java
복사
2번 코드 - 향상된 for문 + temp 변수 활용
package algo250308; import java.util.*; // 같은 숫자는 싫어 - Lv1 public class Pro12906_2 { public int[] solution(int[] arr) { Stack<Integer> stack = new Stack<>(); int temp = -1; for (int value : arr) { if (value != temp) { stack.push(value); temp = value; } } int answerLength = stack.size(); int[] answer = new int[answerLength]; for (int i = answerLength - 1; i >= 0; i--) { answer[i] = stack.pop(); } return answer; } }
Java
복사
3번 코드 - Stack 만 활용
stack.peek()를 활용하여 중복된 값을 넣지 않도록 같지 않을 경우에만 stack에 추가하도록 함
package algo250308; import java.util.*; // 스택만 활용하여 풀이 public class Pro12096_3 { public Stack<Integer> solution(int[] arr) { Stack<Integer> stack = new Stack<>(); for (int num : arr) { if (stack.isEmpty() || stack.peek() != num) { stack.push(num); } } return stack; } }
Java
복사

성능 비교

정확성 부분은 사실 큰 차이가 없었는데 효율성 테스트에서 차이가 있음을 확인할 수 있었다. 아무래도 1, 2번 코드는 배열과 stack을 같이 사용하다 보니 이 부분에서 효율성의 차이가 있지 않을까 싶다. 즉 배열을 통해 데이터를 순회하는 과정에서 시간이 걸리는데 이 과정에서 3번 코드는 배열을 통해 확인하는 과정이 없으니 효율성 면에서 유리할 수밖에 없는 것이다.
1번 코드
정확성 테스트
효율성 테스트
2번 코드
정확성 테스트
효율성 테스트
3번 코드 - Stack 만 활용
정확성 테스트
효율성 테스트