프로그래머스 124나라

jathazp·2021년 7월 1일
0

algorithm

목록 보기
43/57

문제링크

https://programmers.co.kr/learn/courses/30/lessons/12899?language=cpp

문제

풀이

  1. share가 3으로 나누어 떨어지면 4를 추가, share--
  2. share를 3으로 나눈 나머지가 1이면 1을 추가
  3. share를 3으로 나눈 나머지가 2이면 2를 추가

시행착오

3진수로 변환하는 과정에서 일반적인 3진수와 달리 0이 존재하지 않기때문에 3으로 나누어 떨어진다면 몫을 하나 줄이고 0대신 4을 추가하는 작업이 필요했다.
뺄셈에서 수를 빌려오는(?) 것과 비슷한 사고로 진행했다.

일반적인 3진수 변환에서 어떻게 변형을 해야할지 한참 고민했다...

코드

#include <string>
#include <vector>
#include <stack>
using namespace std;

string solution(int n) {
    string answer = "";
    stack<char> st;
    int share = n, remainder;
    while (share != 0) {
        remainder = share % 3;
        share = share / 3;

        if (remainder == 0) {
            share -= 1;
            st.push('4');
        }
        else if (remainder == 1) {
            st.push('1');
        }
        else if (remainder == 2) {
            st.push('2');
        }
    }

    while (!st.empty()) {
        answer += st.top();
        st.pop();
    }
    
    return answer;
}

후기

문제도 단순하고 정~말 쉬워보이는데 생각만큼 쉽지 않았다.

0개의 댓글