프로그래머스 - 큰 수 만들기 (Java, 그리디)

2025. 3. 5. 18:47·알고리즘
728x90

아이디어

그리디

 

풀이

먼저, 큰 수를 유지하려면 앞쪽에 나오는 수가 뒤쪽에 나오는 수보다 커야한다. 

현재 수를 기준으로 현재 수가 다음 수보다 큰 지는 알 수 없으므로 현재 수는 answer에 무조건 추가한다.

(현재 수와 answer의 수들만 비교할 것이다.)

 

처음에는 현재 수가 answer의 마지막 수보다 큰 경우 마지막 수를 제거하는 방식으로 접근했다.

그러나 이 방식에서는 answer의 제거된 수 앞에 현재 수보다 작은 수가 여전히 남아있을 경우 최적해를 가질 수 없게 된다.

그래서 answer의 마지막 인덱스부터 순회하여 현재 수보다 작은 수가 존재한다면 이를 모두 제거하도록 하였다.

 

만약 제거된 수가 k보다 작다면, 이는 추가된 수 앞에 이보다 작은 수가 없어서 제거 없이 계속 추가된 경우이다. 

그러므로 answer 뒷부분의 최소 k - cnt 개의 수들은 내림차순으로 구성되므로,

뒷부분의 k - cnt개의 수를 모두 제거하여 최적해를 구할 수 있다. 

 

그리고 String으로 푸니 시간이 너무 오래 걸려서 StringBuilder를 사용했다.

 

import java.util.*;
class Solution {
    public String solution(String number, int k) {
        int len = number.length(), cnt = 0;
        StringBuilder sb = new StringBuilder("");

        for(char x : number.toCharArray()) {
            if(sb.equals("")) {
                sb.append(x);
                continue;
            }
            int cur = Integer.parseInt(x + "");

            while(sb.length() > 0){
                int prev = Integer.parseInt(sb.charAt(sb.length() - 1) + "");

                if(prev < cur && cnt < k) {
                    sb.deleteCharAt(sb.length() - 1);
                    cnt++;
                } else break;
            }
             sb.append(x);
        }

        String answer = sb.toString();
        if(cnt < k) answer = sb.substring(0, sb.length() - (k - cnt)).toString();

        return answer;
    }
}
728x90

'알고리즘' 카테고리의 다른 글

프로그래머스 - 섬 연결하기 (Java, 최소 신장 트리(MST), 크루스칼)  (0) 2025.03.05
프로그래머스 - 구명보트 (Java, 투포인터)  (0) 2025.03.05
프로그래머스 - 조이스틱 (Java, 그리디)  (0) 2025.03.05
프로그래머스 - 전력망을 둘로 나누기 (Java, 완전 탐색, bfs)  (0) 2025.03.05
프로그래머스 - 소수 찾기 (Java, 백트래킹, 소수, 에라토스테네스의 체)  (0) 2025.03.04
'알고리즘' 카테고리의 다른 글
  • 프로그래머스 - 섬 연결하기 (Java, 최소 신장 트리(MST), 크루스칼)
  • 프로그래머스 - 구명보트 (Java, 투포인터)
  • 프로그래머스 - 조이스틱 (Java, 그리디)
  • 프로그래머스 - 전력망을 둘로 나누기 (Java, 완전 탐색, bfs)
suhsein
suhsein
티끌모아 태산
  • suhsein
    기억 못 할 거면 기록이라는 좋은 수단이 있다
    suhsein
  • 전체
    오늘
    어제
    • 분류 전체보기
      • ASAC
      • Next.js
      • Docker
      • MySQL
      • Java
      • Spring-Proxy, AOP
      • Spring Boot, JPA
      • Spring Security
      • DB
      • 알고리즘
      • PS
      • TOPCIT
      • AWS 자격증
      • 비공개
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 안녕하세요
  • 인기 글

  • 태그

    외판원순회
    Alias
    오블완
    동적프로그래밍
    DP
    해시
    포인터
    티스토리챌린지
    tsp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
suhsein
프로그래머스 - 큰 수 만들기 (Java, 그리디)
상단으로

티스토리툴바