KDLiam

[Programmers ์ฝ”๋”ฉ ๊ธฐ์ดˆ ํŠธ๋ ˆ์ด๋‹ : Java] ์ฝ”๋“œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋ณธ๋ฌธ

Problems(Java)/Programmers

[Programmers ์ฝ”๋”ฉ ๊ธฐ์ดˆ ํŠธ๋ ˆ์ด๋‹ : Java] ์ฝ”๋“œ ์ฒ˜๋ฆฌํ•˜๊ธฐ

KDLiam 2025. 10. 10. 14:49

๐Ÿ”ฃ ๋ชจ๋“œ ํ† ๊ธ€๋กœ ๋ฌธ์ž ์ถ”์ถœํ•˜๊ธฐ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 181932๋ฒˆ)

๐Ÿ“Œ ๋ฌธ์ œ ๋งํฌ: https://school.programmers.co.kr/learn/courses/30/lessons/181932


๋ฌธ์ œ ์š”์•ฝ

๋ฌธ์ž์—ด code๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฝ์œผ๋ฉฐ, ๋ฌธ์ž '1'์ด ๋‚˜์˜ค๋ฉด mode๋ฅผ ํ† ๊ธ€(0↔1)ํ•œ๋‹ค.

  • mode๊ฐ€ 0์ผ ๋•Œ๋Š” **์ง์ˆ˜ ์ธ๋ฑ์Šค(0,2,4,...)**์˜ ๋ฌธ์ž๋งŒ ์ถœ๋ ฅ
  • mode๊ฐ€ 1์ผ ๋•Œ๋Š” **ํ™€์ˆ˜ ์ธ๋ฑ์Šค(1,3,5,...)**์˜ ๋ฌธ์ž๋งŒ ์ถœ๋ ฅ
    '1' ์ž์ฒด๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด "EMPTY" ๋ฐ˜ํ™˜.

๋‚ด๊ฐ€ ์ฒ˜์Œ ์ง  ์ฝ”๋“œ (์›๋ณธ)

 
class Solution {
    public String solution(String code) {
        StringBuilder answer = new StringBuilder();
        int mode = 0;
        char c;
        
        for(int i=0;i<code.length();i++) {
            c = code.charAt(i);
            
            // mode change
            if(c == '1') { 
                if(mode == 0) { mode = 1; } 
                else { mode = 0; }
            } else { // c != 1
                if(i%2==0 && mode==0) {
                    answer.append(c);
                } else if(i%2==1 && mode==1) {
                    answer.append(c);
                }
            }
        }
        
        return (answer.length()==0 ? "EMPTY" : answer.toString());
    }
}

๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ฐœ์„ ํ•œ ์ฝ”๋“œ

 
class Solution {
    public String solution(String code) {
        StringBuilder answer = new StringBuilder();
        int mode = 0;
        
        for (int i = 0; i < code.length(); i++) {
            char c = code.charAt(i);
            
            if (c == '1') {
                mode = mode == 0 ? 1 : 0;
                continue;
            }
            
            if (i % 2 == mode) {
                answer.append(c);
            }
        }
        
        return (answer.length() == 0) ? "EMPTY" : answer.toString();
    }
}

ํ•ต์‹ฌ ํฌ์ธํŠธ (์ด ์ฝ”๋“œ์˜ ํ•ต์‹ฌ ๋‘ ์ค„)

  • mode = mode == 0 ? 1 : 0;
    → '1'์„ ๋งŒ๋‚ฌ์„ ๋•Œ mode๋ฅผ ํ† ๊ธ€. (0↔1)
  • if (i % 2 == mode)
    → ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ์ง/ํ™€(i%2) ๊ณผ mode๊ฐ€ ๊ฐ™์œผ๋ฉด ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅ

์ด ๋‘ ์ค„๋กœ ๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Boolean์„ ์ด์šฉํ•œ ํ’€์ด

 
class Solution {
    public String solution(String code) {
        StringBuilder answer = new StringBuilder();
        Boolean mode = false;
        
        for(int i=0;i<code.length();i++) {
            char c = code.charAt(i);
            
            if(c=='1') {
                mode = !mode; 
                continue;
            }
            if(i%2== (mode?1:0)) {
                answer.append(c);
            }
        }
        
        return (answer.length()==0 ? "EMPTY" : answer.toString());
    }
}
  • ์žฅ์ : boolean์ด ์˜๋„๋ฅผ ๋” ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค (mode๊ฐ€ ์ฐธ์ด๋ฉด ํ™€์ˆ˜ ๋ชจ๋“œ).
  • ๊ฐ€๋…์„ฑ์ด ๋” ์ข‹์•„์ง€๊ณ , ์ฝ๋Š” ์‚ฌ๋žŒ์ด ์˜๋„๋ฅผ ๋ฐ”๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„·๊ณต๊ฐ„ ๋ณต์žก๋„

  • ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n) — ๋ฌธ์ž์—ด ๊ธธ์ด๋งŒํผ ํ•œ ๋ฒˆ ์ˆœํšŒ
  • ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) (๊ฒฐ๊ณผ ๋ฌธ์ž์—ด ์ €์žฅ์šฉ)
    (๋ชจ๋‘ ์ž…๋ ฅ ํฌ๊ธฐ์— ์„ ํ˜•์ ์œผ๋กœ ๋น„๋ก€ — ๋งค์šฐ ํšจ์œจ์ )