dev_beomgeun
꾸준하게 차근차근
dev_beomgeun
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • 전공 (0)
      • 운영체제 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (0)
    • 개발 공부 (32)
      • 웹 (6)
      • 리눅스 (4)
      • 머신러닝 (1)
      • 스프링 (17)
      • Git (2)
      • AWS (2)
    • 개발 도서, 강의 (3)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식(김영한.. (2)
      • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (1)
    • 문제 풀이 (118)
      • 백준 알고리즘 (72)
      • 프로그래머스 알고리즘, SQL (38)
      • Hackerrank SQL (8)
    • 프로젝트 기록 (4)
      • 캡스톤 종합설계 (4)
      • 반려하루 프로젝트 (0)
    • 활동 기록 (12)
      • 네이버 부스트캠프 (7)
      • 취준 & 코테 (4)
      • 소프트웨어 마에스트로 13기 (1)
    • 이것저것 (1)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인
  • 방명록

공지사항

인기 글

태그

  • BFS
  • 네이버 부스트캠프
  • AI Tech
  • 부스트캠프
  • 백준 DP
  • 반성
  • 그래프탐색
  • Baekjoon
  • 프로그래머스
  • Hackerrank
  • 서블릿
  • 일기
  • 회고
  • 프로그래머스 SQL
  • c++
  • dp
  • 스프링
  • HackerRank mysql
  • 기록
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev_beomgeun

꾸준하게 차근차근

문제 풀이/프로그래머스 알고리즘, SQL

[프로그래머스] 3진법 뒤집기 (n진법, bitset) [C++]

2021. 1. 3. 18:57
728x90

programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수

programmers.co.kr

기본적인 진법 변환과 비트 연산 문제이다.

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
    '문제 풀이/프로그래머스 알고리즘, SQL' 카테고리의 다른 글
    • [프로그래머스 SQL] NULL 처리하기
    • [프로그래머스] SQL 문제 정리
    • [프로그래머스] 문자열 내 마음대로 정렬하기(문자열) [C++]
    • [프로그래머스] 완주하지 못한 선수(map) [C++]
    dev_beomgeun
    dev_beomgeun
    백엔드 개발을 하며 얻은 지식과 경험을 공유합니다. 현재 카카오페이에서 백엔드 엔지니어로 일하고 있습니다.

    티스토리툴바