[문제보기]
2018 KAKAO BLIND. 다트 게임
[풀이방법]
문제에 다트 게임을 세 차례 던진다고 했기 때문에 num의 크기를 3으로 잡아주었다.
입력값으로 받은 string dartResult를 하나씩 검사를 하여 조건에 맞게 연산을 진행해주었다.
그리고 string 형이므로 아스키코드를 대입하여 풀었다.
1. 점수
점수는 0~10점이 존재하지만 아스키코드에는 '10'에 대한 번호는 존재하지 않는다. 그렇기 때문에 dartResult[i] 값으로
'0'이 들어왔을 때, 먼저 들어온 값을 확인하여 '1'이면 자릿수를 올리고 '0'을 더해 '10'의 값을 만들어준다.
2. 보너스
'S'는 1 제곱이므로 따로 구현은 필요 없고, 'D', 'T'에 대해서만 구현을 해주면 된다.
3. 옵션
dartResult[i] 값이 '*'이면 현재 num값과 그 전의 num값에 대해서 2배를 해준다.
dartResult[i] 값이 '#'이면 현재 num값에 대해서만 -1을 곱해준다.
[소스코드]
//다트 게임
#include <string>
#include <iostream>
#include <cmath>
using namespace std;
int num[3];
int solution(string dartResult) {
int answer = 0;
int cnt = 0;
for(int i=0; i<dartResult.size(); i++){
if('0' <= dartResult[i] && dartResult[i] <= '9'){
if(dartResult[i] == '0'){
if(i > 0 && dartResult[i-1] == '1')
num[cnt-1] = (num[cnt-1] * 10) + (dartResult[i]-'0');
else{
num[cnt++] = 0;
}
}
else if(dartResult[i] == '1'){
num[cnt++] = dartResult[i] - '0';
continue;
}
else{
num[cnt++] = dartResult[i]-'0';
}
}
else if('9' < dartResult[i] && dartResult[i] < 'Z' ){
if(dartResult[i] == 'D'){
num[cnt-1] = pow(num[cnt-1], 2);
}
else if(dartResult[i] == 'T'){
num[cnt-1] = pow(num[cnt-1], 3);
}
}
else{
if(dartResult[i] == '*'){
num[cnt-1] *= 2;
if(cnt-2 >=0)
num[cnt-2] *= 2;
}
else{
num[cnt-1] *= -1;
}
}
}
for(int i=0; i<3; i++){
answer += num[i];
}
return answer;
}
[해결과정 중 실수한 부분]
#include <string>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int arr[]={0,0,0,0};
int cnt=0;
int flag=1;
while(cnt<dartResult.size()){
char c=dartResult[cnt];
if(c=='0'){
if(dartResult[cnt-1]=='1')
arr[flag]=10;
}
else if(c=='S'){
flag++;
}
else if(c=='D'){
arr[flag] *=arr[flag];
flag++;
}
else if(c=='T'){
arr[flag] *=arr[flag]*arr[flag];
flag++;
}
else if(c=='*'){
arr[flag-2]=2;
arr[flag-1]=2;
}
else if(c=='#'){
arr[flag-1]*=-1;
}
else{
arr[flag]=c-'0';
}
cnt++;
}
for(int i=1; i<=3; i++){
answer+=arr[i];
}
return answer;
}
위의 코드는 필자의 친구가 푼 코드이다.
필자와 방법은 비슷하지만 '*'에 대한 연산을 진행해주기 위해 arr의 크기를 4로 정해주고,
필자는 아스키코드의 범위를 이용하여 조건을 세웠지만, 필자의 친구는 dartResult[] 값으로 올 데이터가
숫자, S, D, T, *, # 이렇게 6개 정도만 있으므로 각각 if문을 통해 찾아주었다.
[참고한 자료]
https://github.com/jongyeon95/algorithmStudy
'알고리즘 스터디 > Programmers' 카테고리의 다른 글
[프로그래머스][C++] 2018 KAKAO BLIND. 방금 그 곡 (level 2) (0) | 2020.08.31 |
---|---|
[프로그래머스] 2018 KAKAO BLIND 캐시 (level 2) (0) | 2020.08.27 |
[프로그래머스][C+] 2018 KAKAO BLIND. 뉴스 클러스터링 (level 2) (0) | 2020.08.26 |
[프로그래머스][C+] 2018 KAKAO BLIND. 비밀 지도 (level 1) (0) | 2020.08.26 |
[Programmers][C++] N으로 표현 ( level 3) (0) | 2020.07.31 |