728x90

S, D(점수 2제곱),T(점수 3제곱)

*(앞점수와 해당 점수 2배), #(해당 점수를 음수로)

3번의 다트 점수가 주어질때 S,D,T, * , # 를 계산한 총점을 반환 

public int solution(String dartResult) {

int answer = 0;

char[] arr = dartResult.toCharArray();

ArrayList<Integer> scoreList = new ArrayList<>();

for (int i=-0; i<arr.length;i++) {

if(Character.isDigit(arr[i])&&!Character.isDigit(arr[i+1])) {

scoreList.add(Integer.parseInt(arr[i]+""));

}else if(Character.isDigit(arr[i])) {

scoreList.add(Integer.parseInt(arr[i]+""+arr[i+1]));

i++;

}else if(arr[i]=='D') {

int score =scoreList.get(scoreList.size()-1);

score = score*score;

scoreList.remove(scoreList.size()-1);

scoreList.add(score);

}else if(arr[i]=='T') {

int score = scoreList.get(scoreList.size()-1);

score = score*score*score;

scoreList.remove(scoreList.size()-1);

scoreList.add(score);

}else if(arr[i]=='*') {

int score = scoreList.get(scoreList.size()-1);

score = 2*score;

scoreList.remove(scoreList.size()-1);

scoreList.add(score);

if(scoreList.size()>=2) {

int pscore = scoreList.get(scoreList.size()-2);

pscore = 2*pscore;

scoreList.remove(scoreList.size()-2);

scoreList.add(scoreList.size()-1, pscore);

}

}else if(arr[i]=='#') {

int score = scoreList.get(scoreList.size()-1);

score = -1*score;

scoreList.remove(scoreList.size()-1);

scoreList.add(score);

}

}

for (Integer integer : scoreList) {

answer+=integer;

}

return answer;

}

점수리스트를 만들어 

int score = scoreList.get(scoreList.size()-1);

를 통해 해당 점수를 얻어 S,D,T, *, # 연산을 해준다. 

만약 *의 경우 앞에 점수가 있다면 

 

if(scoreList.size()>=2) {

int pscore = scoreList.get(scoreList.size()-2);

pscore = 2*pscore;

scoreList.remove(scoreList.size()-2);

scoreList.add(scoreList.size()-1, pscore);

}

이전 점수까지 계산해주고 본래 위치로 다시 삽입한다. 

 

for (Integer integer : scoreList) {

answer+=integer;

}

이후 answer에 리스트를 순회하면서 점수를 각각 더해준다.

+ Recent posts