개발공부/코딩테스트 연습문제
[프로그래머스] (1차) 다트 게임
ku-na
2022. 1. 13. 12:46
문제 설명과 제한사항


풀이
import java.util.*;
class Solution {
public int solution(String dartResult) {
int answer = 0;
int tmp = 0;
int count = 0;
String[] dR = dartResult.split("");
List<Integer> score = new ArrayList<Integer>();
score.add(0);
for(int i = 0; i < dR.length; i++){
if(Character.isDigit(dartResult.charAt(i))) {
if(dR[i].equals("0") && dR[i-1].equals("1")) {
dR[i] = "10";
}
tmp = Integer.parseInt(dR[i]);
}
else {
switch (dR[i]) {
case "S" :
score.add(tmp);
count++;
break;
case "D" :
score.add(tmp * tmp);
count++;
break;
case "T" :
score.add(tmp * tmp * tmp);
count++;
break;
case "*" :
score.add(score.get(count-1)*2);
score.add(score.get(count)*2);
score.remove(count);
score.remove(count-1);
break;
case "#" :
score.add(score.get(count)*(-1));
score.remove(count);
break;
}
}
}
for(Integer s : score){
answer += s;
}
return answer;
}
}
++
테스트5, 테스트8 런타임 오류 잡아야한다..
import java.util.*;
class Solution {
public int solution(String dartResult) {
int answer = 0;
int tmp = 0;
int count = 0;
List<Integer> score = new ArrayList<Integer>();
String[] dR = dartResult.split("");
score.add(0);
for(int i = 0; i < dR.length; i++){
if(Character.isDigit(dR[i].charAt(0))) {
if( i > 0 && dR[i].equals("0") && dR[i-1].equals("1")) {
dR[i] = "10";
}
tmp = Integer.parseInt(dR[i]);
}
else {
switch (dR[i]) {
case "S" :
score.add(tmp);
count++;
break;
case "D" :
score.add(tmp * tmp);
count++;
break;
case "T" :
score.add(tmp * tmp * tmp);
count++;
break;
case "*" :
score.add(score.get(count-1)*2);
score.add(score.get(count)*2);
score.remove(count);
score.remove(count-1);
break;
case "#" :
score.add(score.get(count)*(-1));
score.remove(count);
break;
}
}
}
for(Integer s : score){
answer += s;
}
return answer;
}
}
++
런타임 에러는 if(dR[i].equals("0") && dR[i-1].equals("1"))
이부분에서 잡았다. 사실 신경이 쓰이긴 했지만. 0이 처음에 왔을때 i-1을 하면 인덱스 범위에서 벗어나는 발생하는 문제였다.
하드 코딩으로 푼 것 같은 느낌이 강한데.
1. Character.isDigit(dR[i].charAt(0)) : 문자가 숫자인지 아닌지 판단.
2. Integer.parseInt(dR[i]) : 문자열을 숫자로 반환
두개를 제외하면 기본적인 반복문과 리스트를 활용한 풀이였다.
++
import java.util.*;
class Solution {
public int solution(String dartResult) {
int answer = 0;
int tmp = 0;
int count = 0;
List<Integer> score = new ArrayList<Integer>();
String[] dR = dartResult.split("");
score.add(0);
for(int i = 0; i < dR.length; i++){
if(Character.isDigit(dR[i].charAt(0))) {
if( i > 0 && dR[i].equals("0") && dR[i-1].equals("1")) {
dR[i] = "10";
}
tmp = Integer.parseInt(dR[i]);
}
else {
switch (dR[i]) {
case "S" :
score.add(tmp);
count++;
break;
case "D" :
score.add(tmp * tmp);
count++;
break;
case "T" :
score.add(tmp * tmp * tmp);
count++;
break;
case "*" :
score.set(count-1 ,score.get(count-1)*2);
score.set(count, score.get(count)*2);
break;
case "#" :
score.set(count, score.get(count)*(-1));
break;
}
}
}
for(Integer s : score){
answer += s;
}
return answer;
}
}
++
코드가 너무 길어서 줄이고 싶었는데
List에서 값을 교체하는 내장 함수를 찾아서 사용했다.
List<Integer> score = new ArrayList<Integer>();
->score.set(count-1 ,score.get(count-1)*2);
count -1 인덱스에 있는 값을 score.get(count-1)*2 로 교체한 것임.