Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ/Programmers

[Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ณ ๋“์  kit ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

ALiNew 2020. 7. 8. 13:03

๋ฌธ์ œ ์„ค๋ช…

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

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

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

 

์ œํ•œ ์กฐ๊ฑด

  • number๋Š” 1์ž๋ฆฌ ์ด์ƒ, 1,000,000์ž๋ฆฌ ์ดํ•˜์ธ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

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

 

์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋‚˜

์ฒซ๋ฒˆ์งธ ์‹œ๋„ (ํ…Œ์ŠคํŠธ 6, 7, 8, 9 ์‹œ๊ฐ„์ดˆ๊ณผ ๐Ÿ˜‚)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.lang.StringBuilder;

class Solution {
    public String solution(String number, int k) {
        for(int i = 0; i < k; i++) {
            // remove i th index
            ArrayList<String> digits = Arrays.stream(number.split("")).collect(Collectors.toCollection(ArrayList::new));
            ArrayList<String> reducedNums = new ArrayList<>();
            
            for(int j = 0; j < digits.size(); j++) {
                ArrayList<String> copy = new ArrayList<>(digits);
                copy.remove(j);
                
                reducedNums.add(gather(copy));
            }
            
            // find max
            String max = findMax(reducedNums);
            
            // renew number
            number = max;
        }
        
        return number;
    }
    
    public String findMax(ArrayList<String> list) {
        String max = list.get(0);
        
        for(int i = 1; i < list.size(); i++) {
            if(list.get(i).compareTo(max) > 0) max = list.get(i);
        }
        
        return max;
    }
    
    public String gather(ArrayList<String> list) {
        StringBuilder sbd = new StringBuilder();
        
        for(String str : list) sbd.append(str);
        
        return sbd.toString();
    }
}

 

๋‘๋ฒˆ์งธ ์‹œ๋„ (ํ…Œ์ŠคํŠธ 6, 7, 8, 9, 10 ์‹œ๊ฐ„ ์ดˆ๊ณผ ๐Ÿคฆ‍โ™€๏ธ๐Ÿคฆ‍โ™‚๏ธ)

import java.util.ArrayList;
import java.util.Arrays;
import java.lang.StringBuilder;

class Solution {
    public String solution(String number, int k) {
        for(int i = 0; i < k; i++) {
            // remove i th index
            char[] digits = number.toCharArray();
            ArrayList<String> reducedNums = new ArrayList<>();
                        
            for(int j = 0; j < digits.length; j++) {
                reducedNums.add(gather(digits, j));
            }
            
            // find max
            String max = findMax(reducedNums);
            
            // renew number
            number = max;
        }
        
        return number;
    }
    
    public String findMax(ArrayList<String> list) {
        String max = list.get(0);
        
        for(int i = 1; i < list.size(); i++) {
            if(list.get(i).compareTo(max) > 0) max = list.get(i);
        }
        
        return max;
    }
    
    public String gather(char[] arr, int removedIdx) {
        StringBuilder sbd = new StringBuilder();
        
        for(int i = 0; i < arr.length; i++) {
            if(i != removedIdx) sbd.append(arr[i]);
        }
        
        return sbd.toString();
    }
}

 

์ตœ์ข… ํ•ด๊ฒฐ ์ฝ”๋“œ

import java.lang.StringBuilder;

class Solution {
    public String solution(String number, int k) {
        StringBuilder sbd = new StringBuilder(number);

        for (int i = 0; i < k; i++) {
            int l = sbd.length();
            int idx = l - 1;
            for (int j = 0; j < l - 1; j++) {
                if (sbd.charAt(j) < sbd.charAt(j + 1)) {
                    idx = j;
                    break;
                }
            }

            sbd.deleteCharAt(idx);
        }

        return sbd.toString();
    }
}

 

์™œ ์ €๋ ‡๊ฒŒ ํ’€์—ˆ๋‚˜

ํ•™๊ต์—์„œ greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๋ฐฐ์šธ๋•Œ ๊ต์ˆ˜๋‹˜๊ป˜์„œ ํ•ด์ฃผ์‹  ๋ง์”€์ด ์žˆ๋‹ค.

 

"Greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ณธ์งˆ์€ ํ˜„ ์‹œ์ ์—์„œ ์ตœ์„ ์˜ ์„ ํƒ์ด ๊ฒฐ๊ตญ ์ตœ์„ ์˜ ์„ ํƒ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค."

 

๊ทธ๋ž˜์„œ ๋ณธ์งˆ์— ์ง‘์ค‘ํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•œ ๊ฒฐ๊ณผ ์•„๋ž˜์™€ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ–ˆ๋‹ค.

 

  1. number์˜ ๊ธธ์ด๊ฐ€ n์ด๋ผ๋ฉด 0๋ถ€ํ„ฐ n-1 ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ญ์ œํ•œ ์ˆซ์ž๋“ค์„ ๋ชจ์•„๋†“๋Š”๋‹ค.
  2. ๊ทธ ์ˆซ์ž๋“ค ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๊ณ ๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  number์— ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋Œ€์ž…ํ•œ๋‹ค.
  3. ์œ„ ๊ณผ์ •์„ k๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.

 

 

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ํšจ์œจ์ด์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‘๋ฒˆ์งธ ์‹œ๋„์—์„œ๋Š” ๋˜‘๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ตœ๋Œ€ํ•œ ๋ฐฐ์—ด๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค.

๊ทผ๋ฐ ์ฒซ๋ฒˆ์งธ ์‹œ๋„๋ณด๋‹ค ๋” ํšจ์œจ์ด ๋‚˜๋นด๋‹ค ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹... ๐Ÿคฆ‍โ™‚๏ธ๐Ÿคฆ‍โ™€๏ธ

 

๊ฐ™์ด ์Šคํ„ฐ๋””ํ•˜๋Š” ์นœ๊ตฌ์™€ ์ด์•ผ๊ธฐํ•ด๋ณด๋‹ˆ ๊ทธ ์นœ๊ตฌ๋Š” "ํฐ ์ˆ˜๊ฐ€ ์•ž์— ์˜ฌ์ˆ˜๋ก ํฐ ์ˆ˜" ๋ผ๋Š” ์„ฑ์งˆ์„ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ทธ ์นœ๊ตฌ์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ตœ์ข…์ฝ”๋“œ๋ฅผ ์™„์„ฑํ–ˆ๋‹ค. ๊ทธ ์นœ๊ตฌ ์ฝ”๋“œ๋Š” ์•„๋ž˜ ๋ธ”๋กœ๊ทธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

https://0pencoding.github.io/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EA%B3%A0%EB%93%9D%EC%A0%90kit/2020/03/22/%ED%83%90%EC%9A%95%EB%B2%95_%ED%81%B0%EC%88%98%EB%A7%8C%EB%93%A4%EA%B8%B0_level2.html

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณ ๋“์  Kit : [ํƒ์š•๋ฒ•] ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

๋‚œ์ด๋„ โ˜… โ˜… โ˜† โ˜† โ˜† ๋ณธ ๋ฌธ์ œ๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๋นจ๋ฆฌ ํ‘ผ ๋ฌธ์ œ์˜€๋‹ค. ์˜ˆ์™ธ ์ผ€์ด์Šค๋ฅผ ์งˆ๋ฌธํ•˜๊ธฐ์—์„œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ฒ˜์Œ์— ๋ฐ”๋กœ ๋– ์˜ฌ๋ž๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋Œ€๋กœ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๊ณ , ํšจ์œจ์„ฑ๏ฟฝ

0pencoding.github.io

 

๋ฌด์—‡์„ ๋ฐฐ์› ๋‚˜

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์›์น™์ด๋‚˜ ์„ฑ์งˆ์„ ์ฐพ๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.

๋˜ํ•œ StringBuilder์—์„œ deleteCharAt์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. ์•ž์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค.