Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- hash table
- Math
- implement
- greedy
- 구현
- Counting
- Stack
- Binary Search
- Method
- Number Theory
- geometry
- simulation
- 파이썬
- Class
- bit manipulation
- SQL
- Binary Tree
- 코테
- Matrix
- 자바
- database
- 코딩테스트
- string
- Data Structure
- two pointers
- array
- dynamic programming
- java
- Tree
- sorting
Archives
- Today
- Total
코린이의 소소한 공부노트
[프로그래머스/Lv.1] 같은 숫자는 싫어 본문
1. Input
1) int 배열 arr
2) arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 함
2. Output
1) 제거하고 남은 수를 담은 배열
2) 정렬해서 반환하는 것이 아닌, 원래의 순서를 유지해야 한다.
3. Constraint
1) arr의 크기: 1,000,000 이하의 자연수
2) arr의 원소는 0 이상 9 이하의 정수
4. Example
Input: arr={1,1,3,3,0,1,1} -> Output: {1,3,0,1}
5. Code
1) 첫 코드(2022/??)
import java.util.*;
if(arr.length == 1) return arr;
List<Integer> list = new ArrayList();
list.add(arr[0]);
for(int i=1 ; i<arr.length ; i++)
if(arr[i-1] != arr[i]) list.add(arr[i]);
int[] answer = new int[list.size()];
for(int i=0 ; i<answer.length ; i++)
answer[i] = list.get(i);
return answer;
2) Stack을 사용한 코드(2022/11/26)
import java.util.*;
Stack<Integer> st = new Stack<Integer>(); // 지네릭스 안쓰면 pop() 후 저장하는 데 언체크드 에러
st.push(arr[0]);
for(int i=1 ; i<arr.length ; i++){
if(!st.peek().equals(arr[i]))
st.push(arr[i]);
} // for i
int[] answer = new int[st.size()];
for(int i=answer.length-1 ; i>=0 ; i--)
answer[i] = st.pop();
return answer;
- 잘 짰다고 생각했는데, 1번보다 느리고 효율성 테스트에서도 안좋게 나옴
- main 첫 시작에 if(arr.length==1) return arr; 한 줄 추가해서 다시 돌려보니 조금 괜찮게 나오긴 했지만, 역시 1번이 더 좋았음
'코딩테스트 풀이 > JAVA' 카테고리의 다른 글
[프로그래머스/Lv.1] 2016년 (0) | 2022.11.26 |
---|---|
[프로그래머스/Lv.1] 가운데 글자 가져오기 (0) | 2022.11.26 |
[프로그래머스/Lv.1] 나누어 떨어지는 숫자 배열 (0) | 2022.11.26 |
[프로그래머스/Lv.1] 두 정수 사이의 합 (0) | 2022.11.26 |
[프로그래머스/Lv.1] 문자열 내 p와 y의 개수 (0) | 2022.11.25 |