코테/프로그래머스

[프로그래머스/Lv. 1] [1차] 다트 게임

imname1am 2023. 3. 20. 22:03
반응형

🔺 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🔺 코드

 

[Java 자바] 프로그래머스 > Lv1. [1차] 다트 게임

https://programmers.co.kr/learn/courses/30/lessons/17682 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 문제 설명 카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트

yeoeun-ji.tistory.com

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        
        int[] dart = new int[3];
        
        int idx = 0;
        String numStr = "";
        
        for(int i=0;  i<dartResult.length() ; i++) {
            char c = dartResult.charAt(i);
            
            // 숫자인 경우
            if('0' <= c && c <= '9') {
                numStr += String.valueOf(c);
            }
            else if(c=='S' || c=='D' || c=='T') {
                
                int n = Integer.parseInt(numStr);
                
                if(c=='S') {
                    dart[idx++] = (int)Math.pow(n, 1);
                }
                else if(c=='D') {
                    dart[idx++] = (int)Math.pow(n, 2);
                }
                else {
                    dart[idx++] = (int)Math.pow(n, 3);
                }
                
                numStr = ""; // 다시 초기화
            }
            // 옵션인 경우
            else {
                if(c == '*') {
                    dart[idx-1] *= 2;
                    
                    if(idx > 1) dart[idx-2] *= 2;
                }
                else {
                    dart[idx-1] *= (-1);
                }
            }
        }
        
        for(int i : dart) {
            answer += i;
        }
        
        return answer;
    }
}

S/D/T랑 */#로  split해서 나눠서 계산해볼까 생각해보다가 포기....

스택도 쓰면 될거 같은데 어떻게 해야하나 경우의 수를 막 고민해보다가

시간이 좀 길어지길래 다른 분 코드를 참고했다...

 

내가 유의해야 할 부분은 35~42번째 줄 !

 

나는 아스키코드와... char 타입에 참 약한 것 같다...


🔺 다른 풀이들

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;
class Solution {
    public int solution(String dartResult) {
        Stack<Integer> stack = new Stack<>();
        int sum = 0;
        
        for (int i = 0; i < dartResult.length(); ++i) {
            char c = dartResult.charAt(i);
            
            // 숫자인 경우
            if (Character.isDigit(c)) {
                sum = (c - '0');
                
                // 10인 경우
                if (sum == 1 && i < dartResult.length() - 1 && dartResult.charAt(i + 1) == '0') {
                    sum = 10;
                    i++;
                }
                stack.push(sum);
            }
            // 숫자가 아닌 경우
            else {
                int prev = stack.pop();
                
                if (c == 'D') {
                    prev *= prev;
                }
                else if (c == 'T') {
                    prev = prev * prev * prev;
                }
                else if (c == '*') {
                    if (!stack.isEmpty()) {
                        int val = stack.pop() * 2;
                        stack.push(val);
                    }
                    prev *= 2;
                }
                else if (c == '#') {
                    prev *= (-1);
                }

                stack.push(prev);
            }
        }
        
        int totalScore = 0;
        
        while (!stack.isEmpty()) {
            totalScore += stack.pop();
        }
        return totalScore;
    }
}

스택을 활용하셨다!

반응형