본문 바로가기
IT/알고리즘

프로그래머스 큰 수 만들기

by 어센트 2020. 5. 14.

그리디 알고리즘을 이용하여 푸는 문제

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

 

프로그래머스

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

programmers.co.kr

 

처음에 어떤식으로 풀어야할 지 전혀 감이 잡히지 않았지만 n-k 자리의 정수중 최대값을 만드는 것이라는 걸 깨닫고 n-k자리가 될 수 있는 수 중 최대값을 넣고 그 다음은 n-k-1,n-k-2........ 1  의 자리가 될 수 있는 수들 중 최대값을 구하는 방식으로 문제를 해결했다. 문제를 제출할때 하나의 케이스에서 시간초과가 발생했는데 StringBuilder를 사용하지않고 String을 사용해서 생긴 문제였다. 확실히 StringBuilder를 사용하면 속도가 훨씬 빠르긴한 것 같다.

 

 

풀이코드
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
 public static String solution(String number,int k) {
        StringBuilder sb = new StringBuilder();
        int len = number.length();
        int[]num = new int[len];
        for(int i=0;i<len;i++)
        {
            num[i] = Integer.parseInt(number.substring(i,i+1));
        }
        int i = 0,j=0;
        int make = len-k;
        while(i<len) {
            int max = -1;
            int maxIndex =-1;
            for (; i <= len - make + j; i++) {
                if (max < num[i]) {
                    max = num[i];
                    maxIndex = i;
                }
            }
            sb.append(max);
 
            num[maxIndex] = -1;
            i = maxIndex+1;
            j++;
            if(sb.length()==make)break;
        }
 
        return sb.toString();
    }
cs

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

프로그래머스 모의고사  (0) 2020.05.16
프로그래머스 괄호변환  (0) 2020.05.16
프로그래머스 저울 문제 - Greedy  (1) 2020.05.10
백준11053 가장 긴 증가하는 부분수열  (0) 2020.05.08
백준 2156 포도주시식  (0) 2020.05.05