프로그래머스 수 조작하기 1 문제 바로가기

map을 이용한 풀이

일일히 조건문 짜는 것보다 미리 python의 딕셔너리 같은걸 만드는게 어떨까 생각했다. c++에는 이에 해당하는 map이 존재한다. STL을 지원하고, size(), empty(), find(k), operator[]과 같은 여러 기능들을 제공한다. map<char,int> cmd;로 declare한 뒤에 cmd['w']=1처럼 define해도 좋고, 처음부터 {% raw %}{{'w',1},{'s',-1},{'d',10},{'a',-10}}{% endraw %}이렇게 define해도 된다.

#include <string>
#include <vector>
#include <map>

using namespace std;

map<char,int> cmd;
cmd['w'] = 1;
cmd['s'] = -1;
cmd['d'] = 10;
cmd['a'] = -10;

int solution(int n, string control) {
    int ans = n;
    for (char ct: control){
        ans += cmd[ct];
    }
    return ans;
}

switch을 이용한 풀이

가독성을 위한다면 switch을 사용해도 좋다. 각 case별로 기능을 지정해주면 case가 일치할 때에 각각 실행된다.

#include <string>
#include <vector>

using namespace std;

int solution(int n, string control) {
    for (int i = 0; i < control.length(); i++) {
        switch (control[i]) {
            case 'w': n++; break;
            case 's': n--; break;
            case 'd': n += 10; break;
            case 'a': n -= 10; break;
        }
    }

    return n;
}

출처

References