반응형
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
- 알고리즘
- 플러터
- dfs
- 플러터 동작
- flutter
- dart
- Widget Tree
- 에러
- 앱아이콘 변경
- IOS
- linebreak
- zwj
- 코틀린
- 초기화
- Java
- 재귀
- 거리알고리즘
- 비동기 처리
- 완전탐색
- Lazy
- 자바
- Android
- element tree
- Singleton
- Kotlin
- Render object tree
- 싱글톤
- 프로그래머스
- 자료구조
- 프리즈드
Archives
- Today
- Total
모바일 개발하는 자바리안의 메모장
자바(JAVA) - 큰 수 만들기(Programmers : 42883) 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/42883#
와 이건 dfs로 모든 조합 구해서 풀면 되겠다! 하고 풀었다가 좌절한 문제..
고수님들의 설명을 참고하여 그리디 알고리즘을 사용하여 더 간결하고 직관적인 코드로 답을 찾을 수 있었다..
number의 첫번째 숫자부터 순서대로 Stack에 넣어준 뒤,
다음 인덱스의 숫자를 확인 할 때, 그 숫자가 마지막에 넣은 숫자보다 큰지 확인 후 바꿔주며 삭제된 숫자의 개수를 카운트해준다.
이렇게 카운트된 값은 삭제할 숫자 개수, k보다 작은지 비교해주기 위해 사용한다.
상기 그리디한 작업을 반복하며, number의 길이 - k 길이를 유지해주며 stack에 값을 push하면 된다.
import java.util.*;
class Solution {
public String solution(String number, int k) {
int len = number.length();
String answer = "";
Stack<Integer> intStk = new Stack<Integer>();
int delCount = 0;
for (int i = 0; i < len; i++) {
int currInt = Character.getNumericValue(number.charAt(i));
while (!intStk.isEmpty() && delCount < k && currInt > intStk.peek()) {
intStk.pop();
delCount++;
}
if (intStk.size() < len - k) intStk.push(currInt);
}
Iterator itr = intStk.iterator();
while(itr.hasNext()) {
answer += itr.next() + "";
}
return answer;
}
}
반응형
'Java > Java.algorithm' 카테고리의 다른 글
자바(JAVA) - 거리두기 확인하기(Programmers : 81302) (0) | 2022.03.23 |
---|---|
자바(JAVA) - 튜플(Programmers : 64065) (0) | 2022.03.19 |
자바(JAVA) - 괄호 변환(Programmers : 12973) (0) | 2022.03.16 |
자바(JAVA) - 메뉴 리뉴얼(Programmers : 72411) (0) | 2022.03.15 |
자바(JAVA) - 단체사진 찍기(Programmers : 1835) (0) | 2022.03.13 |
Comments