728x90
코드 힌트
- 문자열 파싱 및 점수 계산:
- 주어진 dartResult 문자열을 순차적으로 탐색하며, 각 문자를 처리해 점수를 계산합니다.
- 점수는 세 라운드로 이루어져 있으며, 각 라운드는 숫자(점수)와 보너스(S, D, T), 옵션(*, #)으로 구성됩니다.
- 점수 처리:
- 각 라운드의 점수는 숫자 부분에서 추출합니다. 1 다음에 0이 나오는 경우는 10점으로 처리해야 하므로, 이를 특별히 체크합니다.
- 라운드의 점수는 lastPoint와 currentPoint로 관리되며, 마지막에 최종적으로 합산됩니다.
- 보너스 처리:
- 보너스 문자인 S, D, T는 각각 1제곱, 2제곱, 3제곱을 의미합니다.
- 각 보너스 문자를 만나면, 현재 점수에 제곱 연산을 수행하여 보너스를 적용합니다.
- 옵션 처리:
- *(스타상)은 현재 라운드와 이전 라운드의 점수를 각각 두 배로 만듭니다. 이를 위해 lastPoint와 currentPoint를 모두 곱합니다.
- #(아차상)은 현재 라운드의 점수를 음수로 바꿉니다.
- 최종 결과 계산:
- 마지막 라운드의 점수까지 모두 계산된 후, result에 더해 최종 점수를 반환합니다.
정답은 더보기 클릭
더보기
class Solution {
public int solution(String dartResult) {
int result = 0; // 최종 결과 점수
int lastPoint = 0; // 이전 라운드 점수
int currentPoint = 0; // 현재 라운드 점수
// dartResult 문자열을 하나씩 확인
for (int i = 0; i < dartResult.length(); i++) {
char c = dartResult.charAt(i);
// 현재 문자가 '1'이고, 다음 문자가 '0'이면 10점 처리
if (c == '1' && dartResult.charAt(i+1) == '0') {
result += lastPoint; // 이전 라운드 점수 누적
lastPoint = currentPoint; // 현재 라운드 점수를 이전 라운드로 이동
currentPoint = 10; // 현재 라운드는 10점
i++; // '0'을 건너뛰기 위해 인덱스 증가
continue;
}
// 한 자리 숫자일 때 처리
if (c >= '0' && c <= '9') {
result += lastPoint; // 이전 라운드 점수 누적
lastPoint = currentPoint; // 현재 라운드 점수를 이전 라운드로 이동
currentPoint = c - '0'; // 현재 라운드 점수 설정
continue;
}
// 'S', 'D', 'T' 점수 계산
if (c == 'S') {
// S는 1제곱이므로 점수 변화 없음
continue;
} else if (c == 'D') {
currentPoint *= currentPoint; // D는 2제곱
continue;
} else if (c == 'T') {
currentPoint *= currentPoint * currentPoint; // T는 3제곱
continue;
}
// '*', '#' 점수 보정
if (c == '*') {
lastPoint *= 2; // 이전 라운드 점수 2배
currentPoint *= 2; // 현재 라운드 점수 2배
} else if (c == '#') {
currentPoint *= -1; // 현재 라운드 점수 마이너스
}
}
// 마지막 라운드 점수를 결과에 더하기
result += lastPoint + currentPoint;
return result; // 최종 결과 반환
}
}
728x90
'프로그래머스(Java) > Level 1' 카테고리의 다른 글
[프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석 (0) | 2024.08.26 |
---|---|
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.08.21 |
[프로그래머스] 문자열 나누기 (0) | 2024.08.16 |
[프로그래머스] 신고 결과 받기 (0) | 2024.08.12 |
[프로그래머스] 둘만의 암호 (0) | 2024.08.06 |