Seren dev's blog
article thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/42883

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

그리디 알고리즘을 사용하기 위해서는 아래와 같이 2가지 조건을 만족해야 한다.

1) 탐욕 선택 속성(Greedy Choice Property)
2) 최적 부분 구조(Optimal Substructure)

1)은 이전의 선택이 이후에 영향을 주지 않음을 의미하며, 2)는 부분 문제의 최적결과가 전체에도 그대로 적용될 수 있어야 한다는 것이다.

  1개 제거 2개 제거 3개 제거 4개 제거
1924 924 94 9  
1231234 231234 31234 3234 334

 

위의 입출력 예시를 보면, 앞에서부터 각 자리 숫자를 탐색하여 뒤에 있는 숫자보다 작은 경우에 해당 숫자를 삭제한다.

각 선택마다 이전의 선택이 이후에 영향을 주지 않으며, 부분 문제의 최적결과가 전체에도 그대로 적용되기 때문에 그리디 알고리즘의 조건을 만족한다.

 

코드

class Solution {
    public String solution(String number, int k) {
        StringBuilder answer = new StringBuilder(number);
        
        while (k-- > 0) {
            int i = 0;
            int size = answer.length();
            
            for (; i < size - 1; i++) {
                if (answer.charAt(i) < answer.charAt(i+1)) { // 뒤에 나올 숫자보다 작으면 제거
                    answer.deleteCharAt(i);
                    break;
                }
            }
            
            if (i == size - 1) { // 맨 끝의 숫자 제거
                answer.deleteCharAt(i);
            }
        }
        
        return answer.toString();
    }
}

 

그리디 관련 참고 글

 

알고리즘 - 그리디 알고리즘(Greedy Algorithm)

1. 그리디 알고리즘(Greedy Algorithm)이란? 간단히 설명해, 그리디 알고리즘은 "매 선택에서 현재 당장 최적인 답"을 선택해 전체 적합한 결과를 도출하자는 알고리즘 기법이다. 즉, 백트래킹을 통해

hongjw1938.tistory.com

 

[알고리즘] 탐욕스러운 그리디(Greedy) 알고리즘 정리 (Java)

그리디 알고리즘 그리디 알고리즘은 가장 직관적인 알고리즘 설계 패러다임 중 하나이다. 이는 우리가 원하는 답을 재귀 호출과 똑같이 여러 개의 조각으로 쪼개고, 각 단계마다 답의 한 부분을

loosie.tistory.com

 

 

728x90
profile

Seren dev's blog

@Seren dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!