공부하는 스누피
[JAVA] 다트 게임 - StringBuffer 본문
https://programmers.co.kr/learn/courses/30/lessons/17682
생각과정
- 주어진 문자열에서 한 문자씩 읽어서 숫자인지 아닌지 확인한다.
- 숫자를 char 단위로 받으므로 받을 때 버퍼에 append한다.
- S, D, T 문자를 받을 경우 숫자 입력이 종료되었으니 버퍼를 비우고 점수를 배열에 저장한다.
- 저장 위치는 index로, 점수가 새로 저장될 때마다 증가한다.
- *, # 문자를 받을 경우 index-1위치에 해당하는 점수를 갱신한다.
- * 문자는 이전 점수에게도 영향을 미치니 index가 0이 아닐 때만 index-2 위치를 갱신해준다.
구현
class Solution {
public int solution(String dartResult) {
int answer = 0;
int []arr = new int[3];
StringBuffer numString = new StringBuffer();
int index = 0;
//문자열 순회하며 체크
for(int i=0;i<dartResult.length();i++){
char c = dartResult.charAt(i);
if(Character.isDigit(c) || c == '-'){
numString.append(c);
}
else{
if(c=='S' || c=='D' || c=='T'){
int num = Integer.parseInt(numString.toString());
if(c == 'D')
num = (int)Math.pow(num, 2);
else if(c == 'T')
num = (int)Math.pow(num, 3);
arr[index] = num;
index+=1;
numString.setLength(0);
}
else{
if(c == '*'){
arr[index-1] *= 2;
if(index-1 > 0){
arr[index-2] *= 2;
}
}
else if(c == '#'){
arr[index-1]*=-1;
}
}
}
}
for(int i=0;i<3;i++){
//System.out.println(arr[i]);
answer += arr[i];
}
return answer;
}
}
결과
Character.isDigit(char)
문자가 숫자인지 판별해서 true 또는 false를 반환한다.
Math.pow(number, power)
거듭제곱을 구하는 메소드이다. double을 반환한다.
StringBuffer.setLength()
StringBuffer 객체의 length 프로퍼티를 수정한다. 이때 0으로 설정하면 객체를 간편하게 초기화 시킬 수 있다.
참고
https://jamesdreaming.tistory.com/157
https://coding-factory.tistory.com/531
https://blog.outsider.ne.kr/265
'Algorithms > 코딩테스트 문제풀이' 카테고리의 다른 글
[JAVA] 퇴사 - DFS (0) | 2020.08.19 |
---|---|
[JAVA] 문자열 압축 - StringBuffer (0) | 2020.08.02 |
[JAVA] 14502 연구실 - DFS (0) | 2020.07.24 |
[JAVA] 연산자 끼워넣기 - DFS (0) | 2020.07.23 |
[JAVA] 로봇 청소기 - Simulation (0) | 2020.07.22 |
Comments