Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Spring
- IntelliJ
- 스프링
- JavaScript
- Vue
- Eclipse
- jquery
- aws
- 넥사크로
- oracle
- db
- 오라클
- JPA
- Git
- 시큐리티
- 프로그래머스
- 코틀린
- GitHub
- kotlin
- 쿼리
- Security
- 생성
- 함수
- 자바
- error
- 방법
- 알고리즘
- mybatis
- Java
- 에러
Archives
- Today
- Total
송민준의 개발노트
프로그래머스 큰 수 만들기 본문
programmers.co.kr/learn/courses/30/lessons/42883
처음에 bfs로 접근하는 등의 삽질을 겁나게 하다가...
문제의 조건들을 다시 고려해보았다.
여기서 팁은
1. 숫자의 순서는 무조건 주어진 순서대로 간다는 것.(역순으로 막 뒤집어서 숫자 만들고 안그럼)
2. 순서대로 높은 숫자를 탐색하다가 그 숫자가 위치해야할 자릿수를 고려해야 함.
public String solution(String number, int k) {
int start = 0; // 탐색 시작 범위
int numberLength = number.length();
int limit = numberLength-k; // 제한범위
int remainCount = limit; // 남은 숫자 자리 수
StringBuilder sb = new StringBuilder();
// 제한범위까지 채워지면 out
while(sb.length() != limit) {
int maxNum = 0;
// 시작범위부터 (길이-남은 숫자 자리 수)까지 최대값 산출
// ex. 1231234의 첫번째 탐색은 인덱스 0부터 3까지 탐색 가능함
// 그래야 3번째가 최대값이여도 자릿수를 맞출 수 있음
for (int i = start; i <= numberLength - remainCount; i++) {
maxNum = Math.max(maxNum, Character.getNumericValue(number.charAt(i)));
}
// 남은 자리수 -
remainCount--;
sb.append(maxNum);
시작 값을 최대값의 인덱스 +1부터 시작해야함
start = number.indexOf(String.valueOf(maxNum), start)+1;
}
return sb.toString();
}
참고할만한 소스
public String solution(String number, int k) {
char[] result = new char[number.length() - k];
Stack<Character> stack = new Stack<>();
for (int i=0; i<number.length(); i++) {
char c = number.charAt(i);
while (!stack.isEmpty() && stack.peek() < c && k-- > 0) {
stack.pop();
}
stack.push(c);
}
for (int i=0; i<result.length; i++) {
result[i] = stack.get(i);
}
return new String(result);
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
가장 큰 수 (0) | 2021.02.13 |
---|---|
프로그래머스 HIndex (0) | 2021.02.07 |
프로그래머스 다리를 지나는 트럭 (0) | 2021.02.03 |
프로그래머스 두 개 뽑아서 더하기 (0) | 2021.01.31 |
프로그래머스 - 스킬트리 (0) | 2021.01.29 |