728x90
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
1. 아이디어
- 어차피 다트를 3회까지만 던지기 때문에, 3회까지의 점수배열(score) / 보너스·옵션배열(bonus_option)로 나눠주면 계산하기 편하겠다는 생각을 했다.
- String에서 ' * '의 경우 아무문자로 인식할 수 있기 때문에 정확히 ' * '를 판별하기 위해선 ' \\* ' 처럼 사용해줘야 한다.
- 여러 공백을 한번에 자르기 위해선 ' \\s+ ' 를 사용해준다.
2. 다른 사람의 풀이
다른 분들이 푼 풀이중에 stack을 사용해서 푼 경우가 있었다.
아무래도 선입선출이다보니까.. stack으로 하면 더 깔끔한 코드가 작성될 것 같다!
전체코드
import java.io.*;
import java.util.*;
class Solution {
public int solution(String dartResult) {
String bonus_option[] = new String[6];
String bonus[] = dartResult.replaceAll("0|1|2|3|4|5|6|7|8|9", "").split("");
String score_tmp[] = dartResult.replaceAll("S|D|T|\\*|\\#", " ").trim().split("\\s+");
int score[] = new int[3];
for(int i=0; i<3; i++){
score[i] = Integer.valueOf(score_tmp[i]);
}
Cal(score, Options(bonus, Bonus(bonus, bonus_option)));
int answer = score[0]+score[1]+score[2];
return answer;
}
static int[] Cal(int[] score, String[] bonus_option){
int sum = 0;
for(int i=0; i<3; i++){
if(bonus_option[i*2].equals("D")){
score[i] = score[i]*score[i];
}else if(bonus_option[i*2].equals("T")){
score[i] = score[i]*score[i]*score[i];
}
if(bonus_option[i*2+1] == null){
continue;
}else if((int)bonus_option[i*2+1].charAt(0) == 35){
// # -1
score[i] *= -1;
}else if((int)bonus_option[i*2+1].charAt(0) == 42){
// * *2
score[i] = score[i]*2;
if(i >= 1){
score[i-1] *= 2;
}
}
}
return score;
}
static String[] Options(String[] bonus, String[] bonus_option){
int cnt = 0;
for(int i=0; i<bonus.length; i++){
if((int)bonus[i].charAt(0) == 35 || (int)bonus[i].charAt(0) == 42){
bonus_option[cnt*2-1] = bonus[i];
}else{
cnt++;
}
}
return bonus_option;
}
static String[] Bonus(String[] bonus, String[] bonus_option){
int idx = 0;
for(int i=0; i<bonus.length; i++){
if(bonus[i].equals("D") || bonus[i].equals("S") || bonus[i].equals("T")){
bonus_option[idx] = bonus[i];
idx += 2;
}
}
return bonus_option;
}
}
728x90
'코테 > Algorithm' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈 (JAVA) (0) | 2024.12.19 |
---|---|
[프로그래머스] 성격 유형 검사하기 (JAVA) (0) | 2024.12.18 |
[프로그래머스] 제일 작은 수 제거하기 (JAVA) (0) | 2024.12.16 |
[프로그래머스] 저주의 숫자 3 (JAVA) (0) | 2024.12.16 |
[프로그래머스] 정수 내림차순으로 배열하기 (JAVA) (2) | 2024.12.16 |