1. 문제
https://programmers.co.kr/learn/courses/30/lessons/17682?language=java
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
2. 나의 풀이
class Solution {
public int solution(String dartResult) {
int answer = 0;
String sabon = dartResult;
int [] imsi = new int [3];
//첫 점수가 10점이거나 아닌 경우 구분하여 0번째 인덱스에 저장 후 dartResult에 나머지 문자열 저장
if(dartResult.substring(0, 2).equals("10")) {
imsi[0] = Integer.parseInt(dartResult.substring(0, 2));
dartResult = dartResult.substring(2);
}else {
imsi[0] = Integer.parseInt(dartResult.substring(0, 1));
dartResult = dartResult.substring(1);
}
//첫 점수의 보너스 계산
if(dartResult.substring(0, 1).equals("S")) {
dartResult = dartResult.substring(1);
}else if(dartResult.substring(0, 1).equals("D")) {
imsi[0] = imsi[0] * imsi[0];
dartResult = dartResult.substring(1);
}else if(dartResult.substring(0, 1).equals("T")) {
imsi[0] = imsi[0] * imsi[0] * imsi[0];
dartResult = dartResult.substring(1);
}
//첫 점수의 옵션이 있는 경우 계산
if(dartResult.substring(0, 1).equals("*")) {
imsi[0] *= 2;
dartResult = dartResult.substring(1);
}else if(dartResult.substring(0, 1).equals("#")) {
imsi[0] *= -1;
dartResult = dartResult.substring(1);
}
//두 번째 점수가 10점이거나 아닌 경우 구분하여 1번째 인덱스에 저장 후 dartResult에 나머지 문자열 저장
if(dartResult.substring(0, 2).equals("10")) {
imsi[1] = Integer.parseInt(dartResult.substring(0, 2));
dartResult = dartResult.substring(2);
}else {
imsi[1] = Integer.parseInt(dartResult.substring(0, 1));
dartResult = dartResult.substring(1);
}
//두 번째 점수의 보너스 계산
if(dartResult.substring(0, 1).equals("S")) {
dartResult = dartResult.substring(1);
}else if(dartResult.substring(0, 1).equals("D")) {
imsi[1] = imsi[1] * imsi[1];
dartResult = dartResult.substring(1);
}else if(dartResult.substring(0, 1).equals("T")) {
imsi[1] = imsi[1] * imsi[1] * imsi[1];
dartResult = dartResult.substring(1);
}
//두 번재 점수의 옵션이 있는 경우 계산
if(dartResult.substring(0, 1).equals("*")) {
imsi[0] *= 2;
imsi[1] *= 2;
dartResult = dartResult.substring(1);
}else if(dartResult.substring(0, 1).equals("#")) {
imsi[1] *= -1;
dartResult = dartResult.substring(1);
}
//세 번째 점수가 10점이거나 아닌 경우 구분하여 1번째 인덱스에 저장 후 dartResult에 나머지 문자열 저장
if(dartResult.substring(0, 2).equals("10")) {
imsi[2] = Integer.parseInt(dartResult.substring(0, 2));
dartResult = dartResult.substring(2);
}else {
imsi[2] = Integer.parseInt(dartResult.substring(0, 1));
dartResult = dartResult.substring(1);
}
//세 번째 점수의 보너스 계산
if(dartResult.substring(0, 1).equals("S")) {
dartResult = dartResult.substring(1);
}else if(dartResult.substring(0, 1).equals("D")) {
imsi[2] = imsi[2] * imsi[2];
dartResult = dartResult.substring(1);
}else if(dartResult.substring(0, 1).equals("T")) {
imsi[2] = imsi[2] * imsi[2] * imsi[2];
dartResult = dartResult.substring(1);
}
//세 번재 점수의 옵션이 있는 경우 계산
if(dartResult.equals("*")) {
imsi[1] *= 2;
imsi[2] *= 2;
}else if(dartResult.equals("#")) {
imsi[2] *= -1;
}
for(int i = 0; i < imsi.length; i = i + 1) {
answer += imsi[i];
}
return answer;
}
}
3. 다른 사람 풀이
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');
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;
}
}
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 - 스택/큐 - 주식가격 (0) | 2020.10.13 |
---|---|
프로그래머스 코딩테스트 연습 - 연습문제 - 124 나라의 숫자 (0) | 2020.10.12 |
프로그래머스 코딩테스트 연습 - 2018 KAKAO BLIND RECRUITMENT - [1차] 비밀지도 (0) | 2020.10.08 |
프로그래머스 코딩테스트 연습 - Summer/Winter Coding(~2018) - 예산 (0) | 2020.10.08 |
프로그래머스 코딩테스트 연습 - 연습문제 - 직사각형 별찍기 (0) | 2020.10.08 |