-
[프로그래머스/Level 1] 다트 게임 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 28. 01:30
programmers.co.kr/learn/courses/30/lessons/17682
풀이
1. 이전 점수를 저장할 변수 prev, 현재 점수를 저장할 변수 now 선언
2. now의 값을 prev에 저장하고, 문자열에서 숫자인 부분을 찾아 now에 저장 (이때 숫자가 10인 경우를 따로 예외처리)
3. 문자열에서 S, D, T인 경우에 따라 pow() 함수를 이용해 처리하여 점수를 계산 (S인 경우는 1제곱이므로 생략)
4. 현재 인덱스의 다음 위치에 *이나 #이 있는지 확인하여 조건에 맞게 보너스 점수 처리
(스타상(*)인 경우 이전 점수를 빼주고, 2배를 한 새로운 이전 점수를 갱신해주는게 포인트!)
5. 현재 점수인 now를 answer에 더해줌
전체 코드
#include <string> #include <cmath> using namespace std; int solution(string dartResult) { int answer = 0, prev = 0, now = 0; // 이전 점수, 현재 점수 for(int i = 0; i < dartResult.size(); i++) { if(isdigit(dartResult[i])) { prev = now; // 현재 점수를 이전 점수에 저장 if(dartResult[i + 1] == '0') { // 숫자가 10인 경우 now = 10; i++; } else now = dartResult[i] - '0'; } else if(isalpha(dartResult[i])) { // 보너스 점수 계산 if(dartResult[i] == 'D') now = pow(now, 2); else if(dartResult[i] == 'T') now = pow(now, 3); // 옵션 점수 계산 if(dartResult[i + 1] == '*') { answer -= prev; // 이전 점수를 빼주고 prev *= 2; now *= 2; answer += prev; // 새로 갱신된 점수로 계산 i++; } else if(dartResult[i + 1] == '#'){ now *= -1; i++; } answer += now; } } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 2] 기능개발 (C++) (0) 2020.10.28 [프로그래머스/Level 2] 최댓값과 최솟값 (C++) (0) 2020.10.28 [프로그래머스/Level 1] 비밀지도 (C++) (0) 2020.10.27 [프로그래머스/Level 1] 행렬의 덧셈 (C++) (0) 2020.10.27 [프로그래머스/Level 1] 최대 공약수와 최소 공배수 (C++) (0) 2020.10.27