그리디 알고리즘을 이용하여 푸는 문제
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 |