급하게 푸느라 허접하네요.
문제는 http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/ 의 두번째 문제입니다.
import java.util.ArrayList;
import java.util.List;
public class DartGame {
List<Integer> score = new ArrayList<Integer>();
List<String> bonus = new ArrayList<String>();
List<Integer> option = new ArrayList<Integer>();
static int sum = 0;
public static void main(String[] args) {
DartGame dartgame = new DartGame();
String[] questions = { "1S2D*3T", "1D2S#10S", "1D2S0T", "1S*2T*3S", "1D#2S*3S", "1T2D3D#", "1D2S3T*" };
for (String s : questions) {
dartgame.parse(s);
dartgame.calc();
System.out.println("* " + s + " = " + sum);
}
}
private void parse(String s) {
score.clear();
bonus.clear();
option.clear();
sum = 0;
int point = 0;
while (point < s.length()) {
if (s.charAt(point) == '1' && s.charAt(point + 1) == '0') {
score.add(Integer.parseInt(s.substring(point, point + 2)));
point += 2;
} else {
score.add(Integer.parseInt(s.charAt(point) + ""));
point++;
}
bonus.add(s.charAt(point) + "");
point++;
if (point < s.length()) {
if ( s.charAt(point) == '*' ) {
option.add(2);
point++;
} else if ( s.charAt(point) == '#' ) {
option.add(-1);
point++;
} else {
option.add(1);
}
if ( option.size() > 1 && option.get(option.size()-1) == 2 ) {
option.set(option.size() - 2, option.get(option.size() - 1) * option.get(option.size() - 2));
}
}
if ( score.size() - option.size() == 1 ) {
option.add(1);
}
}
}
private void calc() {
for (int idx = 0; idx < score.size(); idx++) {
int myScore = score.get(idx);
boolean isPlus = true;
if (bonus.get(idx).equals("D"))
myScore = (int) Math.pow(myScore, 2);
else if (bonus.get(idx).equals("T"))
myScore = (int) Math.pow(myScore, 3);
myScore *= option.get(idx);
if (isPlus)
sum += myScore;
else
sum -= myScore;
}
}
}