728x90
programmers.co.kr/learn/courses/30/lessons/68935
기본적인 진법 변환과 비트 연산 문제이다.
n진법으로 바꾸고 싶으면 주어진 수를 n으로 나눈 나머지를 차곡차곡 저장해주면 된다.
비트 순서가 역순이니 온전히 변환한 비트를 보고 싶으면 나머지를 스택에 저장한 뒤, 스택에서 pop 해주면 원래 비트 순서로 출력이 될 것이다.
이 문제는 문제 제목처럼 뒤집기이므로 나머지를 스택에 저장하지 않고 그대로 벡터에 저장해주었다.
그 이후 자릿수에 맞게 3의 n승을 곱해주어 숫자를 계산했다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(int n) {
int answer = 0;
vector<int> v;
while(n >0){
int bit = n % 3;
n = n / 3;
v.push_back(bit);
}
for(int i = 0 ; i < v.size() ; i++){
answer += pow(3, v.size()-1 - i) * v[i];
}
return answer;
}
추가로 만약 2진수 변환을 하고 싶으면 <bitset>이라는 STL를 사용하면 된다.
제대로 찾아보지 않아서 bitset을 통해 다른 진수도 변환이 되는지 확인을 해보지 못했는데
10진수 -> 2진수 변환은 효과적인 것 같다.
#include <bitset>
int a = 8;
cout << bitset<4>(a); //(bitset<비트수> 이름; ) // 를 해주면 결과는 4비트로 1000이 나올 것이다.
string bits = bitset<4>(a).to_string(); // 문자열로 바꾸고 싶으면 .to_string()을 사용하면 된다.
cout << bits;
728x90
'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글
[프로그래머스 SQL] 있었는데요, 없었습니다 (join) (0) | 2021.02.23 |
---|---|
[프로그래머스 SQL] NULL 처리하기 (0) | 2021.02.23 |
[프로그래머스] SQL 문제 정리 (0) | 2021.01.20 |
[프로그래머스] 문자열 내 마음대로 정렬하기(문자열) [C++] (0) | 2020.12.28 |
[프로그래머스] 완주하지 못한 선수(map) [C++] (0) | 2020.12.23 |