KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (509) N
    • Project (1) N
      • blog (1) N
    • CS (1)
    • Web (29)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • Next.js (5)
      • ETC (1)
    • Docker (14)
    • Git (5)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • PS (433)
      • 백준 (187)
      • Programmers (106)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • 백준
  • tree
  • Level 1
  • 정렬
  • 수학
  • LeetCode
  • js
  • C++
  • 다이나믹 프로그래밍
  • C
  • Level1
  • codeup
  • Level 0
  • 그래프
  • 제코베 JS 100제
  • Level 2
  • string
  • recursion
  • 문자열
  • programmers

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/Programmers

Programmers / Level 1 / 3진법 뒤집기 / C++

2021. 11. 12. 23:04

문제 설명

자연수 n이 매개변수로 주어집니다.

n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.


제한사항
  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예

n result
45 7
125 229

입출력 예 설명

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
 
n(10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7
  • 따라서 7을 return 해야 합니다.

 

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229
  • 따라서 229를 return 해야 합니다.

 

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    vector<int> tri;
    
    while(n) {
        tri.push_back(n % 3);
        n /= 3;
    }
    
    int multiply = 1;
    for(int i=tri.size()-1; i>=0; i--) {
        answer += tri[i] * multiply;
        multiply *= 3;
    }
    
    return answer;
}

일단 tri 벡터를 만들어준다.

tri 벡터는 10진수를 3진수로 변환해서 거꾸로 넣어주는 벡터이다.

그리고 3진수를 다시 10진수로 변환할때 끝에서부터 3의 i제곱을 곱해주어 result에 더해주어야 한다.

여기서 i는 3의 0제곱(1), 3, 3의 2제곱(2)... 순으로 증가하기 때문에,

multiply라는 변수를 3의 0제곱(1)로 초기화해주어서 반복문을 돌때마다 3을 곱해준다.

 

그리고 tri벡터의 끝의 요소부터 반대로 multiply변수와 곱해주어 answer에 더해준다.

저작자표시 (새창열림)

'PS > Programmers' 카테고리의 다른 글

Programmers / Level 1 / 최소직사각형 / C++  (0) 2021.11.13
Programmers / Level 1 / 예산 / C++  (0) 2021.11.12
Programmers / Level 2 / 오픈채팅방 / C++  (0) 2021.11.10
Programmers / Level 1 / 실패율 / C++ / JS  (0) 2021.11.08
    'PS/Programmers' 카테고리의 다른 글
    • Programmers / Level 1 / 최소직사각형 / C++
    • Programmers / Level 1 / 예산 / C++
    • Programmers / Level 2 / 오픈채팅방 / C++
    • Programmers / Level 1 / 실패율 / C++ / JS
    KimMinJun
    KimMinJun

    티스토리툴바