코테 준비-문제풀기

프로그래머스 카카오 다트게임 c++

FireStone 2020. 5. 8. 16:06

https://programmers.co.kr/learn/courses/30/lessons/17682

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

- 이 문제는 '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;
}