https://programmers.co.kr/learn/courses/30/lessons/17682
- 이 문제는 '10'을 잘 고려해야한다.
처음에 10을 고려안하고 0부터 9까지 생각했다가 다 꼬여버렸다. 물론 이후에 10도 계산할 수 있도록 바꾸면 되지만 처음부터 잘 생각하고 짜면 좋으니까..
10처럼 두자리를 계산하기 위해 flag를 사용했다.
숫자가 들어갈때마다 num_count를 1씩 증가시켜 인덱스를 함수에 전달해주었고, 0부터 시작해야하므로 num_count는 -1로 초기화 ㄱ
-char to int
: char을 int로 바꾸는 부분은 그냥 -48을 했다. atoi나 stoi는 형이 안맞아서 안되길래 저런식으로 바꿨다.
이 문제는 숫자를 잘라주는거랑 index 만 잘 전달해주면 쉽게 풀 수 있는 문제다..
내가 그걸 잘못해서 시간이 조금 걸리긴했지만 무튼 나처럼 삽질만 안하면 금방 풀 수 있을 것 같다..
#include <string>
#include <vector>
#include <math.h>
using namespace std;
vector<int> result;
void check_sdt(char std, int index){
if(std=='D')
result[index]=pow(result[index],2);
else if(std=='T'){
result[index]=pow(result[index],3);
}
else
;
}
void count_star(int index){
if(index!=0){
result[index]*=2;
result[index-1]*=2;
}
else
result[index]*=2;
}
void count_sh(int index){
int value=result[index];
result[index]= -value;
}
int solution(string dartResult) {
int answer = 0;
bool flag = false;
int num_count=-1;
for(int i=0;i<dartResult.length();i++){
if('0'>dartResult.at(i)||dartResult.at(i)>'9'){
if(dartResult.at(i)=='*')
count_star(num_count);
else if(dartResult.at(i)=='#')
count_sh(num_count);
else
check_sdt(dartResult.at(i),num_count);
flag=false;
}
else if('0'<=dartResult.at(i)&&dartResult.at(i)<='9'){
if(flag)
result[num_count]=10*result[num_count];
else{
int value=dartResult.at(i)-48;
result.push_back(value);
num_count++;
flag=true;
}
}
}
for(int j=0;j<result.size();j++){
answer=answer+result[j];
}
return answer;
}
'코테 준비-문제풀기' 카테고리의 다른 글
교내 코딩테스트 강의 1주차 (0) | 2020.07.08 |
---|---|
프로그래머스 - 힙/ 더 맵게 문제 c++ (0) | 2020.07.03 |
프로그래머스-모의고사 c++ 완전탐색 (0) | 2020.05.07 |
프로그래머스 - 정렬 H-index 문제 (0) | 2020.05.01 |
프로그래머스-스택 '탑'문제 (0) | 2020.01.08 |