-
[프로그래머스] (1차) 다트 게임개발공부/코딩테스트 연습문제 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 로 교체한 것임.
'개발공부 > 코딩테스트 연습문제' 카테고리의 다른 글
[프로그래머스] Level.2-124나라의 숫자 (0) 2022.01.18 [프로그래머스] 신고 결과 받기 (0) 2022.01.17 [프로그래머스] 소수 찾기 (Level.1) (0) 2022.01.13 [프로그래머스] 서울에서 김서방 찾기 (0) 2022.01.11 [프로그래머스] 수박수박수박수박수박수 (0) 2022.01.11