Level 1
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/12906
[첫번째 풀이]
Stack 문제이기 때문에, Stack을 사용한 풀이
연속되는 숫자를 제거하는 것이라 Stack의 peek와 값이 다르면 데이터를 push
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
Stack<Integer> stack = new Stack<>();
stack.push(arr[0]);
for(int i=1;i<arr.length;i++ ) {
if(!stack.peek().equals(arr[i])) {
stack.push(arr[i]);
}
}
int[] answer = new int[stack.size()];
for(int i=0;i<stack.size();i++) {
answer[i] = stack.get(i);
}
return answer;
}
}
Stack
- LIFO (후입선출)
peek() | 최상단에 있는 데이터 조회 |
pop() | 최상단에 있는 데이터 제거 후 반환 |
push(E item) | 데이터 입력 |
isEmpty | 스택이 비어있는지 확인 |
[두번째 풀이]
일반적으로 많이 사용하는 ArrayList를 사용한 풀이
문제에서 주어진 arr의 범위는 0~9이기 때문에, tempNum을 해당 범위를 벗어난 값으로 넣어주면 더 간단하게 코드를 구현할 수 있다.
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
ArrayList<Integer> list = new ArrayList<>();
int tempNum = 10;
for(int num:arr) {
if(tempNum != num) {
list.add(num);
tempNum = num;
}
}
int[] answer = new int[list.size()];
for(int i=0;i<list.size();i++) {
answer[i] = list.get(i);
}
return answer;
}
}
return 타입이 int[] 이므로, ArrayList에 들어있는 데이터를 변환해야 한다.
변환하는 방법은 두가지가 있다.
for문 사용 | for(int i=0; i<list.size(); i++) { answer[i] = list.get(i); } |
확실하게 입력하려면, intValue() 까지 해주어야 한다. list.get(i).intValue() |
stream() | list.stream().mapToInt(i -> i).toArray(); |
Integer를 int로 변환: mapToInt(i -> i) |
stream()을 사용하면, 코드가 간단해 보이지만 for문이 더 익숙하기도 하고 성능이 좋다.
나는 성능이 중요하기 때문에, 앞으로도 for문을 사용할 듯 하다!
반응형
'IT > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 문자열 곱하기 - java (0) | 2025.03.13 |
---|---|
[프로그래머스] 배열 만들기 2 - java (1) | 2025.03.12 |
[프로그래머스] 대소문자 바꿔서 출력하기 - java (1) | 2025.03.12 |
[프로그래머스] 문자열 다루기 기본 - java (0) | 2025.03.11 |
[프로그래머스] 완주하지 못한 선수 - java (1) | 2025.03.05 |