송민준의 개발노트

프로그래머스 큰 수 만들기 본문

알고리즘/프로그래머스

프로그래머스 큰 수 만들기

송민준 2021. 2. 4. 23:41

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

 

코딩테스트 연습 - 큰 수 만들기

 

programmers.co.kr

처음에 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