๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm/Java][ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‹คํŠธ ๊ฒŒ์ž„

๋ฐ˜์‘ํ˜•

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] [1์ฐจ] ๋‹คํŠธ ๊ฒŒ์ž„

https://programmers.co.kr/learn/courses/30/lessons/17682

๋ฌธ์ œ ์„ค๋ช…

๋‹คํŠธ ๊ฒŒ์ž„
์นด์นด์˜คํ†ก์— ๋œฌ ๋„ค ๋ฒˆ์งธ ๋ณ„! ์‹ฌ์‹ฌํ•  ๋•? ์นด์นด์˜คํ†ก ๊ฒŒ์ž„๋ณ„~

์นด์นด์˜คํ†ก ๊ฒŒ์ž„๋ณ„์˜ ํ•˜๋ฐ˜๊ธฐ ์‹ ๊ทœ ์„œ๋น„์Šค๋กœ ๋‹คํŠธ ๊ฒŒ์ž„์„ ์ถœ์‹œํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‹คํŠธ ๊ฒŒ์ž„์€ ๋‹คํŠธํŒ์— ๋‹คํŠธ๋ฅผ ์„ธ ์ฐจ๋ก€ ๋˜์ ธ ๊ทธ ์ ์ˆ˜์˜ ํ•ฉ๊ณ„๋กœ ์‹ค๋ ฅ์„ ๊ฒจ๋ฃจ๋Š” ๊ฒŒ์ž„์œผ๋กœ, ๋ชจ๋‘๊ฐ€ ๊ฐ„๋‹จํžˆ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
๊ฐ“ ์ž…์‚ฌํ•œ ๋ฌด์ง€๋Š” ์ฝ”๋”ฉ ์‹ค๋ ฅ์„ ์ธ์ •๋ฐ›์•„ ๊ฒŒ์ž„์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์ธ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์ง์„ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹คํŠธ ๊ฒŒ์ž„์˜ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์ง์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๋‹คํŠธ ๊ฒŒ์ž„์€ ์ด 3๋ฒˆ์˜ ๊ธฐํšŒ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
๊ฐ ๊ธฐํšŒ๋งˆ๋‹ค ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ ์ˆ˜๋Š” 0์ ์—์„œ 10์ ๊นŒ์ง€์ด๋‹ค.
์ ์ˆ˜์™€ ํ•จ๊ป˜ Single(S), Double(D), Triple(T) ์˜์—ญ์ด ์กด์žฌํ•˜๊ณ  ๊ฐ ์˜์—ญ ๋‹น์ฒจ ์‹œ ์ ์ˆ˜์—์„œ 1์ œ๊ณฑ, 2์ œ๊ณฑ, 3์ œ๊ณฑ (์ ์ˆ˜1 , ์ ์ˆ˜2 , ์ ์ˆ˜3 )์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
์˜ต์…˜์œผ๋กœ ์Šคํƒ€์ƒ() , ์•„์ฐจ์ƒ(#)์ด ์กด์žฌํ•˜๋ฉฐ ์Šคํƒ€์ƒ() ๋‹น์ฒจ ์‹œ ํ•ด๋‹น ์ ์ˆ˜์™€ ๋ฐ”๋กœ ์ „์— ์–ป์€ ์ ์ˆ˜๋ฅผ ๊ฐ 2๋ฐฐ๋กœ ๋งŒ๋“ ๋‹ค. ์•„์ฐจ์ƒ(#) ๋‹น์ฒจ ์‹œ ํ•ด๋‹น ์ ์ˆ˜๋Š” ๋งˆ์ด๋„ˆ์Šค๋œ๋‹ค.
์Šคํƒ€์ƒ()์€ ์ฒซ ๋ฒˆ์งธ ๊ธฐํšŒ์—์„œ๋„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ์Šคํƒ€์ƒ()์˜ ์ ์ˆ˜๋งŒ 2๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 4๋ฒˆ ์ฐธ๊ณ )
์Šคํƒ€์ƒ()์˜ ํšจ๊ณผ๋Š” ๋‹ค๋ฅธ ์Šคํƒ€์ƒ()์˜ ํšจ๊ณผ์™€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ค‘์ฒฉ๋œ ์Šคํƒ€์ƒ() ์ ์ˆ˜๋Š” 4๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 4๋ฒˆ ์ฐธ๊ณ )
์Šคํƒ€์ƒ(
)์˜ ํšจ๊ณผ๋Š” ์•„์ฐจ์ƒ(#)์˜ ํšจ๊ณผ์™€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ค‘์ฒฉ๋œ ์•„์ฐจ์ƒ(#)์˜ ์ ์ˆ˜๋Š” -2๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 5๋ฒˆ ์ฐธ๊ณ )
Single(S), Double(D), Triple(T)์€ ์ ์ˆ˜๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•œ๋‹ค.
์Šคํƒ€์ƒ(*), ์•„์ฐจ์ƒ(#)์€ ์ ์ˆ˜๋งˆ๋‹ค ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
0~10์˜ ์ •์ˆ˜์™€ ๋ฌธ์ž S, D, T, *, #๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋  ์‹œ ์ด์ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ผ.

์ž…๋ ฅ ํ˜•์‹

"์ ์ˆ˜|๋ณด๋„ˆ์Šค|[์˜ต์…˜]"์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด 3์„ธํŠธ.
์˜ˆ) 1S2D*3T

  • ์ ์ˆ˜๋Š” 0์—์„œ 10 ์‚ฌ์ด์˜ ์ •์ˆ˜์ด๋‹ค.
  • ๋ณด๋„ˆ์Šค๋Š” S, D, T ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • ์˜ต์„ ์€ *์ด๋‚˜ # ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.

์ถœ๋ ฅ ํ˜•์‹

3๋ฒˆ์˜ ๊ธฐํšŒ์—์„œ ์–ป์€ ์ ์ˆ˜ ํ•ฉ๊ณ„์— ํ•ด๋‹นํ•˜๋Š” ์ •์ˆ˜๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
์˜ˆ) 37

Code

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int cnt = 0;
        int[] scores = new int[3];
        for(int i=0;i<dartResult.length();i++){
            if(Character.isDigit(dartResult.charAt(i))){
                if(i!=0) // ์ง€๊ธˆ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์ด๊ณ  ์ „ ์ธ๋ฑ์Šค๋„ ์ˆซ์ž์ผ๋•Œ๋Š” 10์ด๋ฏ€๋กœ continue
                    if(Character.isDigit(dartResult.charAt(i-1)))
                        continue;
                if(Character.isDigit(dartResult.charAt(i+1))){
                    // ์ง€๊ธˆ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์ด๊ณ  ๋‹ค์Œ ์ธ๋ฑ์Šค๋„ ์ˆซ์ž์ผ๋•Œ๋Š” 10
                    scores[cnt]=10;
                } 
                else{
                    // ์ง€๊ธˆ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์ด๋ฏ€๋กœ score์— ์ €์žฅ
                    scores[cnt]=dartResult.charAt(i)-'0';
                }
                cnt++;
            }
            if(dartResult.charAt(i)=='D'){
                scores[cnt-1] =scores[cnt-1]*scores[cnt-1];
            }
            if(dartResult.charAt(i)=='T'){
                scores[cnt-1] =scores[cnt-1]*scores[cnt-1]*scores[cnt-1];
            }
            if(dartResult.charAt(i)=='*'){
                if(cnt==1){
                    scores[cnt-1]*=2;
                }
                else {
                    scores[cnt-1]*=2;
                    scores[cnt-2]*=2;
                }
            }
            if(dartResult.charAt(i)=='#'){
                scores[cnt-1]*=-1;
            }
        }
        for(int score:scores) answer+=score;
        return answer;
    }
}

Code ์„ค๋ช…

๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ์ˆซ์ž์ผ ๊ฒฝ์šฐ์™€ D,T์ธ๊ฒฝ์šฐ(S๋Š” ๊ทธ๋Œ€๋กœ์ด๊ธฐ๋•Œ๋ฌธ์— ์ œ์™ธ), *,#์ธ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ์ƒ๊ฐํ–ˆ๋‹ค.
๋จผ์ € ์ˆซ์ž์ผ ๊ฒฝ์šฐ์— ์‹ ๊ฒฝ์จ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ˆซ์ž๊ฐ€ 10์ผ ๊ฒฝ์šฐ์ด๋‹ค. ์ˆซ์ž๊ฐ€ 10์ผ๊ฒฝ์šฐ ์ง€๊ธˆ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์ด๊ณ  ๋‹ค์Œ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์ผ๋•Œ๋Š” 10์ธ ๊ฒฝ์šฐ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ score์— 10์„ ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์ด๊ณ  ์ด์ „ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์ด๋ฉด ์ด ๊ฒฝ์šฐ๋„ 10์ด๊ธฐ ๋•Œ๋ฌธ์— continueํ•ด์ฃผ์–ด ๋‹ค์Œ์œผ๋กœ ๋„˜๊ฒจ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  cnt๋ฅผ ์ด์šฉํ•ด์„œ ์ง€๊ธˆ ํ˜„์žฌ score๋ฅผ ๊ธฐ์–ตํ•ด์ค€๋‹ค.
D, T์ธ ๊ฒฝ์šฐ๋Š” score[cnt-1]๋ฅผ ๊ฐ๊ฐ ์ œ๊ณฑ๊ณผ ์„ธ์ œ๊ณฑ์„ ํ•ด์ค€๋‹ค.
*์ธ ๊ฒฝ์šฐ ๋งจ ์ฒ˜์Œ ์ˆซ์ž์ธ ๊ฒฝ์šฐ์™€ ๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ ์ฒซ ์ˆซ์ž๋ฉด ๊ทธ ์ˆซ์ž๋งŒ 2๋ฐฐํ•ด์ฃผ๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ ์ „ ์ˆซ์ž๊นŒ์ง€ 2๋ฐฐ๋ฅผ ํ•ด์ค€๋‹ค.
#์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ธ๋ฑ์Šค๋งŒ -1๋ฅผ ๊ณฑํ•ด์ค€๋‹ค

๋ฐฐ์šด์ 

์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ์ข€ ์‹ ๊ฒฝ์จ์„œ ํ•ด์•ผ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ์•ˆ๋œจ๊ณ , ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ๊ผผ๊ผผํžˆ ์ƒ๊ฐํ•ด์„œ ์ฝ”๋”ฉํ•ด ์ฃผ์–ด์•ผํ–ˆ๋‹ค.

๋ฐ˜์‘ํ˜•