[프로그래머스/C++] ㅡ LV1 - 3진법 뒤집기
2021. 3. 2. 16:19ㆍ필요/코딩테스트(프로그래머스)
문제
programmers.co.kr/learn/courses/30/lessons/68935
풀이
#include <stack>
#include <vector>
using namespace std;
int solution(int n) {
stack<int> s;
while (n/3 != 0) { // 3진수로 변환
s.push(n%3);
n/=3;
}
s.push(n);
int answer = 0;
int r = 1;
while (!s.empty()) { // 반전과 동시에 십진수로 변환
int m = s.top();
s.pop();
answer+=m*r;
r*=3;
}
return answer;
}
개념
stack의 성질인 FILO을 활용했다.
풀이
일단 십진수 n을 삼진수로 변환한다.
삼진수의 첫번째 값은 나머지 값이 아니므로, 반복문 밖에서 따로 취급한다.
각 삼진수의 요소들을 스택에 넣었다가 빼면, 반전이 이뤄진다.
그 요소를 가지고 삼진수 -> 십진수로 변환한다.
※string을 사용한 풀이도 생각이 되나, 좀 더 번거로울 것 같다.
'필요 > 코딩테스트(프로그래머스)' 카테고리의 다른 글
[프로그래머스/C++] ㅡ LV1 - 나누어 떨어지는 숫자 배열 (0) | 2021.03.05 |
---|---|
[프로그래머스/C++] ㅡ LV1 - 같은 숫자는 싫어 (0) | 2021.03.03 |
[프로그래머스/C++] ㅡ LV1 - 가운데 글자 가져오기 (0) | 2021.02.26 |
[프로그래머스/C++] ㅡ LV1 - 2016년 (0) | 2021.02.26 |
[프로그래머스/C++] ㅡ LV1 - 체육복 (0) | 2021.02.25 |