๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฆ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿ—‚๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

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

by ์‚๋šค์˜ค๋ฆฌ 2025. 10. 2.

๋ฌธ์ œ ์„ค๋ช…

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

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

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

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

0~10์˜ ์ •์ˆ˜์™€ ๋ฌธ์ž S, D, T, *, #๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋  ์‹œ ์ด์ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ผ.

์ž…๋ ฅ ํ˜•์‹

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

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

์ถœ๋ ฅ ํ˜•์‹

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

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

์˜ˆ์ œ dartResult answer
1 1S2D*3T 37
2 1D2S#10S 9
3 1D2S0T 3
4 1S*2T*3S 23
5 1D#2T*3S 5
6 1T2D3D# -4
7 1D2S3T* 59

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(String dartResult) {
        // ์ตœ์ข… ํ•ฉ์‚ฐ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
        int answer = 0;
        
        // ๊ฐ ๋ผ์šด๋“œ์˜ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด
        int[] scores = new int[3];
        // ํ˜„์žฌ ๋ผ์šด๋“œ ์ธ๋ฑ์Šค
        int idx = 0;
        // ์ ์ˆ˜๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•  ๋ณ€์ˆ˜
        int num = 0;
        
        // ๋ฌธ์ž์—ด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆœํšŒ
        for (int i = 0; i < dartResult.length(); i++) {
            // ํ˜„์žฌ ๋ฌธ์ž ๊ฐ€์ ธ์˜ค๊ธฐ
            char c = dartResult.charAt(i);
            
            // ์ˆซ์ž์ธ ๊ฒฝ์šฐ (์ ์ˆ˜ ๋ถ€๋ถ„)
            if (Character.isDigit(c)) {
                // '10' ์ฒ˜๋ฆฌ (์•ž์ด '1'์ด๊ณ  ๋’ค๊ฐ€ '0'์ธ ๊ฒฝ์šฐ)
                if (c == '1' && i + 1 < dartResult.length() && dartResult.charAt(i+1) == '0') {
                    num = 10;
                    // '0'๊นŒ์ง€ ์†Œ๋น„ํ–ˆ์œผ๋ฏ€๋กœ ์ธ๋ฑ์Šค ํ•˜๋‚˜ ๋” ์ด๋™
                    i++;
                } else {
                    // ๋ฌธ์ž '0'~'9' -> ์‹ค์ œ ์ˆซ์ž 0~9
                    num = c - '0';
                }
            // ๋ณด๋„ˆ์Šค ์ฒ˜๋ฆฌ (S, D, T)
            } else if (c == 'S' || c == 'D' || c == 'T') {
                // 1์ œ๊ณฑ
                if (c == 'S') {
                    num = (int) Math.pow(num, 1);
                // 2์ œ๊ณฑ
                } else if (c == 'D') {
                    num = (int) Math.pow(num, 2);
                // 3์ œ๊ณฑ
                } else if (c == 'T') {
                    num = (int) Math.pow(num, 3);
                }
                
                // ๊ณ„์‚ฐ๋œ ์ ์ˆ˜๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅ ํ›„ ๋ผ์šด๋“œ ์ด๋™
                scores[idx++] = num;
            // ์˜ต์…˜ ์ฒ˜๋ฆฌ (*, #)
            } else if (c == '*'  || c == '#') {
                // ํ˜„์žฌ ์ ์ˆ˜ 2๋ฐฐ
                if (c == '*') {
                    scores[idx-1] *= 2;
                    // ์ด์ „ ์ ์ˆ˜๋„ ์กด์žฌํ•˜๋ฉด 2๋ฐฐ
                    if (idx > 1) {
                        scores[idx-2] *= 2;
                    }
                // ํ˜„์žฌ ์ ์ˆ˜ ๋งˆ์ด๋„ˆ์Šค๋กœ ๋ณ€๊ฒฝ
                } else if (c == '#') {
                    scores[idx-1] *= -1;
                }
            }
        }
        
        // 3๋ผ์šด๋“œ ์ ์ˆ˜ ํ•ฉ์‚ฐ
        answer = scores[0] + scores[1] + scores[2];
        
        // ์ตœ์ข… ์ ์ˆ˜ ๋ฐ˜ํ™˜
        return answer;
    }
}

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉํ–ฅ

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„ ๋•Œ, ๋ฌธ์ž์—ด๋กœ ์ฃผ์–ด์ง„ ๋‹คํŠธ ๊ฒŒ์ž„ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์‹ฑ ํ•ด์„œ ๊ฐ ๋ผ์šด๋“œ๋ณ„ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ตœ์ข… ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ผ๋Š” ์ ์„ ํŒŒ์•…ํ–ˆ๋‹ค. ํŠนํžˆ ์ ์ˆ˜๊ฐ€ 0๋ถ€ํ„ฐ 10๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ, ๋‹จ์ˆœํžˆ ํ•œ ๊ธ€์ž์”ฉ ์ž๋ฅด๋ฉด ‘10’์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์ˆซ์ž์™€ ๋ณด๋„ˆ์Šค, ์˜ต์…˜์„ ์ฐจ๋ก€๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

์กฐ๊ฑด์„ ๋ถ„์„ํ•ด ๋ณด๋ฉด, ๊ฐ ๋ผ์šด๋“œ๋Š” “์ ์ˆ˜ + ๋ณด๋„ˆ์Šค + ์˜ต์…˜”์˜ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ณด๋„ˆ์Šค๋Š” ์ ์ˆ˜๋ฅผ ์ œ๊ณฑ ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๊ณ , ์˜ต์…˜์€ ํ˜„์žฌ ์ ์ˆ˜๋‚˜ ์ด์ „ ์ ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ ์ˆ˜๋Š” ํ•œ ์ž๋ฆฌ ๋˜๋Š” ๋‘ ์ž๋ฆฌ ์ˆซ์ž์ด๋ฏ€๋กœ, Character.isDigit()์œผ๋กœ ์ˆซ์ž๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ‘10’์ธ ๊ฒฝ์šฐ๋ฅผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ดํ›„ ๋ณด๋„ˆ์Šค ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ์ ์ˆ˜์— ์ œ๊ณฑ ์—ฐ์‚ฐ์„ ์ ์šฉํ•˜๊ณ , ์˜ต์…˜ ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ์ ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ๋กœ๋Š” ๊ฐ ๋ผ์šด๋“œ๋ณ„ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” int[] scores ๋ฐฐ์—ด์„ ์„ ํƒํ–ˆ๋‹ค. ๋‹คํŠธ ๊ฒŒ์ž„์€ ์ •ํ™•ํžˆ 3๋ผ์šด๋“œ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๊ฐ€ 3์ธ ๋ฐฐ์—ด์„ ์“ฐ๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค. ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ต์…˜ ์ฒ˜๋ฆฌ ์‹œ ์ด์ „ ๋ผ์šด๋“œ ์ ์ˆ˜์—๋„ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•ด์ง„๋‹ค.

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

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ฌธ์ž์—ด ๊ธธ์ด์— ๋น„๋ก€ํ•˜์—ฌ O(N)์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” ๊ธธ์–ด์•ผ 20~30์ž ์ •๋„๋ผ์„œ ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ ‘๊ทผ๋ฒ•์€ ๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ์ ํ•ฉํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.