Coding Test

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 42883: ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ - ์ž๋ฐ” ํ’€์ด(10๋ฒˆ ์‹œ๊ฐ„์ดˆ๊ณผ)

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2024. 4. 2.

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

์–ด๋–ค ์ˆซ์ž์—์„œ k๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž 1924์—์„œ ์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋Š” 94 ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ์ˆซ์ž number์™€ ์ œ๊ฑฐํ•  ์ˆ˜์˜ ๊ฐœ์ˆ˜ k๊ฐ€ solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. number์—์„œ k ๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด

number๋Š” 2์ž๋ฆฌ ์ด์ƒ, 1,000,000์ž๋ฆฌ ์ดํ•˜์ธ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
k๋Š” 1 ์ด์ƒ number์˜ ์ž๋ฆฟ์ˆ˜ ๋ฏธ๋งŒ์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

number  k return
1924 2 94
1231234 3 3234
4177252841 4 775841


 

ํ’€์ด

ํƒ์š•๋ฒ•์„ ํ™œ์šฉํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์ฃผ์–ด์ง„ ์ƒํ™ฉ์—์„œ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•ด์•ผํ•˜๊ณ  ์ด ์„ ํƒ์ด ๋‹ค์Œ ์ƒํ™ฉ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„  

์ฒซ๋ฒˆ ์งธ - ์ž๋ฆฟ์ˆ˜๊ฐ€ ํฐ ์ˆ˜์—ฌ์•ผํ•œ๋‹ค.

๋‘๋ฒˆ ์งธ -  ์ž๋ฆฟ ์ˆ˜ ๋งˆ๋‹ค ํฐ ์ˆ˜๊ฐ€ ํ• ๋‹น ๋ผ์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ฃผ์–ด์ง„ k๋ฅผ ๋บ€ digit ํฌ๊ธฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผํ•˜๊ณ  ๊ทธ ์ˆ˜๋Š” ์™ผ์ชฝ ๊ธฐ์ค€ ์ž๋ฆฟ ์ˆ˜๋ถ€ํ„ฐ ํฐ ์ˆ˜๊ฐ€ ์™€์•ผํ•œ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์งง๊ณ  ๊ฐ„๋‹จํ•˜์—ฌ ์‰ฌ์šด ๋ฌธ์ œ์ธ์ค„ ์•Œ์•˜์ง€๋งŒ ์ •๋‹ต์„ ๋งž์ถ”๊ธด์—” ์‰ฝ์ง€๋Š” ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. 

n ์ด 1,000,000์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์˜ˆ์ƒํ•˜์˜€์ง€๋งŒ ์ œ์ถœํ•ด๋ณด๋‹ˆ ๊ฑฐ์˜ ๋‹ค ํ†ต๊ณผ๋ผ์„œ ๋งž์ถ˜ ๋ฌธ์ œ์ธ์ค„ ์ฐฉ๊ฐํ–ˆ์ง€๋งŒ, 10๋ฒˆ์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ‹€๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค.

class Solution {
    public String solution(String number, int k) {
        int digit = number.length() - k;
        int startIdx = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = digit; i > 0; i--) {
            int tmp = 0;
            for (int j = startIdx; j <= number.length() - i; j++) {
                int num = Character.getNumericValue(number.charAt(j));
                if (tmp < num) {
                    tmp = num;
                    startIdx = j + 1;
                }
            }
            sb.append(tmp);
        }
        return sb.toString();
    }
}

 

 

 

์˜ค๋‹ต๋…ธํŠธ

์ฃผ์–ด์ง„ ๋ฌธ์ œ๋Š” ์ฃผ์–ด์ง„ ์ˆซ์ž ๋ฌธ์ž์—ด์—์„œ k๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ํƒ์š•์  (Greedy) ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์–ด์ง„ ์ฝ”๋“œ์—์„œ๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋‘ ๋ฒˆ์˜ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n^2)์ด๊ธฐ ๋•Œ๋ฌธ์— ํฐ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ๋Š” ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์Šคํƒ(Stack) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆซ์ž๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์Œ“์•„๊ฐ€๋ฉด์„œ ํ˜„์žฌ ์ˆซ์ž๊ฐ€ ์Šคํƒ์˜ ๋งจ ์œ„ ์ˆซ์ž๋ณด๋‹ค ํฌ๋ฉด ์Šคํƒ์—์„œ ๋งจ ์œ„ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ˜„์žฌ ์ˆซ์ž๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์Šคํƒ์—๋Š” ํฐ ์ˆซ์ž๊ฐ€ ์œ„์ชฝ์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค. ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ํšจ์œจ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

import java.util.Stack;

class Solution {
    public String solution(String number, int k) {
        Stack<Character> stack = new Stack<>();
        int keep = number.length() - k;
        
        for (int i = 0; i < number.length(); i++) {
            char digit = number.charAt(i);
            while (!stack.isEmpty() && k > 0 && stack.peek() < digit) {
                stack.pop();
                k--;
            }
            stack.push(digit);
        }
        
        StringBuilder sb = new StringBuilder();
        while (!stack.isEmpty()) {
            sb.append(stack.pop());
        }
        return sb.reverse().substring(0, keep);
    }
}

 

'Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 12971 : ์Šคํ‹ฐ์ปค ๋ชจ์œผ๊ธฐ(2) - ๋ฌธ์ œ ํ’€์ด ( ์ž๋ฐ” / java)  (0) 2024.05.31
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 76503 : ์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ ์‹œ์ฆŒ2 - ๋ชจ๋‘ 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ (์ž๋ฐ” - ์œ„์ƒ์ •๋ ฌ , ์ธ์ ‘๋ฆฌ์ŠคํŠธ , ์ธ์ ‘ ํ–‰๋ ฌ ํ’€์ด ๋ฐ ์˜ค๋ฅ˜ 8๋ฒˆ, 11๋ฒˆ, 17๋ฒˆ ์˜ค๋‹ต๋…ธํŠธ  (1) 2023.11.07
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 72410 : ์‹ ๊ทœ ์•„์ด๋”” ์ถ”์ฒœ - ์ž๋ฐ” ํ’€์ด ๋ฐ ์˜ค๋‹ต๋…ธํŠธ(ํ…Œ์ผ€ 2 , 22 , 23 , 15 , 20 , 21 , 25)  (2) 2023.10.04
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 133502 : ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ (์‹œ๊ฐ„ ์ดˆ๊ณผ , String ์˜ replace, + ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ) ํ’€์ด ๋ฐ ๋ฆฌ๋งˆ์ธ๋”ฉ  (0) 2023.09.27
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - (JAVA) - 64061 : ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„ (2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ) ์˜ค๋‹ต๋…ธํŠธ ๋ฐ ํ’€์ด  (0) 2023.09.21

๋Œ“๊ธ€