Notice
Recent Posts
Recent Comments
Link
Welcome! Everything is fine.
[프로그래머스/Lv.1] 같은 숫자는 싫어 - Java 본문
728x90
📌 문제
📌 풀이
연속적으로 등장하는 숫자를 순서를 유지한 채 제거해야하는 문제였다. stack을 사용하여 문제를 풀었다.
- arr 배열을 순회하면서 아래의 경우에만 stack에 원소를 넣는다.
- stack이 비어있는 경우
- stack의 맨 위의 원소가 지금 넣으려는 arr 배열의 원소와 다른 경우
- 반환타입에 맞춰 int 배열에 다시 옮겨 담는다. 단, LIFO(Last In First Out) 구조인 stack의 특성을 고려해 배열의 맨 뒤부터 채워넣는다.
📌 stack 사용법
stack은 다음과 같이 선언한다.
import java.util.Stack;
Stack<자료형> 변수명 = new Stack<>();
다음은 stack의 기본적인 메서드이다. pop()이나 peek()을 할 때, stack이 비어있다면 EmptyStackException이 발생하므로 주의한다.
- push() : stack에 객체를 저장한다.
- pop() : stack의 맨 위의 객체를 꺼낸다.
- isEmpty() : stack이 비어있으면 True, 비어있지 않으면 False를 반환한다.
- peek() : stack의 맨 위의 객체를 꺼내지는 않고 반환한다.
📌 전체 코드
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
Deque<Integer> stack = new ArrayDeque<>();
for (int num : arr) {
if (stack.isEmpty() || stack.peek() != num) {
stack.push(num);
}
}
int[] answer = new int[stack.size()];
for (int i = answer.length - 1; i >= 0; i--) {
answer[i] = stack.pop();
}
return answer;
}
}
📌 또 다른 코드
stack이 아닌 ArrayList로 푸는 방법도 있었다.
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
List<Integer> list = new ArrayList<Integer>();
list.add(arr[0]);
for (int i = 1; i < arr.length; i++) {
if (arr[i] != arr[i - 1])
list.add(arr[i]);
}
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++)
answer[i] = list.get(i);
return answer;
}
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
[프로그래머스/Lv.1] 가장 가까운 같은 글자 - Java (0) | 2024.04.11 |
---|---|
[프로그래머스/Lv.1] 공원 산책 - Java (0) | 2024.04.11 |
[프로그래머스/Lv.1] 시저 암호 - Java (0) | 2024.04.09 |
[프로그래머스/Lv.1] 신고 결과 받기(2022 KAKAO BLIND RECRUITMENT) - Java (0) | 2024.04.09 |
[프로그래머스/Lv.1] 가장 많이 받은 선물(2024 KAKAO WINTER INTERNSHIP) - Java (0) | 2024.04.08 |