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
- leetcode
- dfs
- 코딩테스트
- 리트코드 자바
- 스택
- 프로그래머스 java
- 파이썬
- 분할정복
- 자바 5464
- 스프링 에러
- leetcode 1721
- 리트코드 1557
- 백준 18222
- 구현
- BFS
- 자바
- 인텔리제이 에러
- 그래프 자바
- 백준 16935
- DP
- java leetcode
- Java
- 카카오
- 프로그래머스
- 코테
- daily challenge
- 자바 리트코드
- 리트코드
- 백준
- java 프로그래머스
Archives
- Today
- Total
레벨업 일지
[Java] 프로그래머스 큰 수 만들기 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42883?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
큰 수를 만드는 문제
풀이
스택을 사용하여 풀이하였다.로직은 다음과 같다.
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