# 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17682
목차
카카오 문제 해설 2018 카카오 신입 공채 1차 코딩 테스트 문제 해설 링크
더보기
문자열 처리String Manipulation를 묻는 문제입니다.
앞에서부터 한 글자씩 잘라서 처리할 수 있고, 또는 간단한 컴파일러를 만들듯이 토큰화Tokenizing와 의미 분석Semantic Analysis을 통해 어렵지 않게 계산할 수 있습니다.
점수 중에는 한 자리뿐만 아니라 두 자리인 10점도 포함되어 있기 때문에 한 글자씩 잘라서 처리할때는 그 부분에 유의해야겠네요. 토큰화로 처리할 때는 정규식을 사용하면 비교적 쉽게 잘라낼 수 있습니다. S, D, T는 각각 원점수, 제곱, 세제곱으로 처리하고 스타상은 두 배로 계산하면 됩니다. 참, 아차상은 마이너스 점수라는 점에 유의하세요.
내 문제풀이
import java.util.Stack;
class Solution {
public int solution(String dartResult) {
int answer = 0;
Stack scores = new Stack<>();
for (char ch : dartResult.replace("10", "X").toCharArray()) {
if (ch >= '0' && ch <= '9') {
scores.push(ch - '0');
} else if (ch == 'X') {
scores.push(10);
} else if (ch == 'D') {
int score = scores.pop();
scores.push(score * score);
} else if (ch == 'T') {
int score = scores.pop();
scores.push(score * score * score);
} else if (ch == '*') {
int score_now = scores.pop();
if (!scores.empty()) {
int score_before = scores.pop();
scores.push(score_before*2);
}
scores.push(score_now*2);
} else if (ch == '#') {
int score = scores.pop();
scores.push(-score);
}
}
for (int score : scores) {
answer += score;
}
return answer;
}
}
프로그래머스 다른사람 풀이 참고 (- , KG , 박관우 , 구진범 외 4 명 / 링크)
import java.util.*;
class Solution {
public int solution(String dartResult) {
Stack 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');
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);
}
// System.out.println(prev);
stack.push(prev);
}
}
int totalScore = 0;
while (!stack.isEmpty()) {
totalScore += stack.pop();
}
return totalScore;
}
}
'알고리즘 문제풀이 > 프로그래머스 Level 1' 카테고리의 다른 글
[2024 KAKAO WINTER INTERNSHIP/JavaScript] 가장 많이 받은 선물 (0) | 2024.08.29 |
---|---|
[2019 카카오 개발자 겨울 인턴십/Java] 크레인 인형뽑기 게임 (0) | 2023.07.26 |
[2023 KAKAO BLIND RECRUITMENT/Java] 개인정보 수집 유효기간 ★ (0) | 2023.07.24 |
[2022 KAKAO TECH INTERNSHIP/Java] 성격 유형 검사하기 (0) | 2023.07.23 |
[2018 KAKAO BLIND RECRUITMENT[1차]/Java] 비밀지도 (0) | 2023.07.23 |