티스토리 뷰
입출력 예제
dartResult : 1S2D*3T
answer : 37
풀이 과정
저는 이 문제를 문제 과정 그대로 따라가듯이 했습니다
숫자를 읽어 들이고 그다음 문자를 읽고 스타상일 때 과정, 아차상일 때 과정 둘다 존재하지 않을 때 과정을 따로 if문을 이용해서 문제를 해결해나갔습니다.
c++에서 string에서 int로 바꾸는 방법은 stoi()함수를 이용해서 정수형으로 사용할 수 있습니다.
그리고 flag를 이용해서 첫번째 스타상일 때 처리를 하려고 만들었습니다. 이것때문에 다른 아차상과 보너스가 없을 때도 flag를 처리해야 해서 코드가 길어져버렸네요. 너무 많아서 flag를 내려도 되겠지만 처음 구현했을 때여서 수정을 하지 않았습니다.
각 숫자마다 계산이 되면 vnumber라는 배열에 저장을 해놓고 끝에는 vnumber의 합을 구해서 최종 결과값을 구했습니다.
소스 코드
#include <string> #include <vector> using namespace std; int solution(string dartResult) { int answer = 0; bool flag = false; string number = ""; int inumber = 0; vector<int> vnumber; for (int i = 0; i < dartResult.length(); i++) { if (dartResult[i] >= '0'&&dartResult[i] <= '9') { number += dartResult[i]; } else if(dartResult[i] == 'D' || dartResult[i] == 'S' ||dartResult[i]=='T') { inumber = stoi(number); number = ""; if (dartResult[i + 1] == '*') { //스타상 if (dartResult[i] == 'S') { if (flag == false) { vnumber.push_back(inumber*2); flag = true; } else { vnumber[vnumber.size() - 1] *= 2; vnumber.push_back(inumber*2); } } else if (dartResult[i] == 'D') { if (flag == false) { vnumber.push_back(inumber*inumber*2); flag = true; } else { vnumber[vnumber.size() - 1] *= 2; vnumber.push_back(inumber*inumber*2); } } else if (dartResult[i] == 'T') { if (flag == false) { vnumber.push_back(inumber*inumber*inumber*2); flag = true; } else { vnumber[vnumber.size() - 1] *= 2; vnumber.push_back(inumber*inumber*inumber*2); } } i++; } else if (dartResult[i + 1] == '#') { //아차상 if (dartResult[i] == 'S') { if (flag == false) { vnumber.push_back(inumber*(-1)); flag = true; } else { vnumber.push_back(inumber*(-1)); } } else if (dartResult[i] == 'D') { if (flag == false) { vnumber.push_back(inumber*inumber*(-1)); flag = true; } else { vnumber.push_back(inumber*inumber*(-1)); } } else if (dartResult[i] == 'T') { if (flag == false) { vnumber.push_back(inumber*inumber*inumber*(-1)); flag = true; } else { vnumber.push_back(inumber*inumber*inumber*(-1)); } } i++; } else { if (dartResult[i] == 'S') { if (flag == false) { vnumber.push_back(inumber); flag = true; } else { vnumber.push_back(inumber); } } else if (dartResult[i] == 'D') { if (flag == false) { vnumber.push_back(inumber*inumber); flag = true; } else { vnumber.push_back(inumber*inumber); } } else if (dartResult[i] == 'T') { if (flag == false) { vnumber.push_back(inumber*inumber*inumber); flag = true; } else { vnumber.push_back(inumber*inumber*inumber); } } } } } for (int i = 0; i < vnumber.size(); i++) { answer += vnumber[i]; } return answer; }
'알고리즘 > 프로그래머스(C++)' 카테고리의 다른 글
[프로그래머스/알고리즘] 뉴스 클러스터링 (0) | 2019.02.11 |
---|---|
[프로그래머스/알고리즘] 프렌즈4블록 (0) | 2019.02.07 |
[프로그래머스/알고리즘] 캐시 (0) | 2019.02.07 |
[프로그래머스/알고리즘] 비밀지도 (0) | 2019.02.07 |
[프로그래머스/알고리즘] 도둑질 (0) | 2019.01.20 |