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 | 31 |
Tags
- 파이썬
- java 프로그래머스
- 자바 리트코드
- leetcode
- 분할정복
- 자바 5464
- 코딩테스트
- DP
- dfs
- 구현
- 프로그래머스 java
- BFS
- 백준 16935
- 백준 18222
- 백준
- Java
- 카카오
- 리트코드 자바
- 리트코드 1557
- 스택
- 코테
- 스프링 에러
- leetcode 1721
- 인텔리제이 에러
- 리트코드
- 프로그래머스
- 그래프 자바
- 자바
- java leetcode
- daily challenge
Archives
- Today
- Total
레벨업 일지
[Java] 프로그래머스 큰 수 만들기 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42883?language=java
큰 수를 만드는 문제
풀이
스택을 사용하여 풀이하였다.로직은 다음과 같다.
1. 주어진 길이가 백만이니 선형 탐색 O(N) 으로 풀어야 한다.
2. 스택의 top 숫자가 현재 숫자 number.charAt(i) 보다 작으면 크거나 같은 숫자가 나올때까지 pop 을 한다.
3. k만큼 제거 한 이후는 스택의 숫자를 합쳐서 리턴한다.
4. 모든 숫자가 내림차순이라서 한번도 pop 되지 않았을 경우 예외처리 한다
코드
import java.util.*;
class Solution {
public String solution(String number, int k) {
//idx, val
Stack<Character> st = new Stack<>();
st.push(number.charAt(0));
for(int i =1 ;i < number.length() ;i++){
int c = number.charAt(i) - '0';
while(!st.isEmpty() && st.peek()-'0' < c && k > 0){
st.pop();
k--;
}
st.push(number.charAt(i));
}
String ans ="";
if ( k > 0){
for(int i = 0 ; i <number.length() - k ; i++){
char x = number.charAt(i);
ans += x;
}
}else{
for(char x : st){
ans += x;
}
}
return ans;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 단속카메라 (0) | 2023.01.24 |
---|---|
[Java] 프로그래머스 등굣길 (1) | 2023.01.23 |
[Java] 프로그래머스. 체육복 (0) | 2023.01.22 |
[Java] 프로그래머스 2020 카카오 인턴_ 보석 쇼핑 (0) | 2023.01.16 |
[java] 프로그래머스-무지의 먹방 라이브 (0) | 2023.01.06 |
Comments