KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (486)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (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)
    • PS (431)
      • 백준 (187)
      • Programmers (104)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/백준

백준 / 수학 / 1373번 / 2진수 8진수 / C++

2021. 8. 7. 14:11

문제

2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.

입력

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.

예제 입력 1

11001100

예제 출력 1

314

 

#include <iostream>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	
	string result = "";
	string n;
	cin >> n;
	
	if(n.length() % 3 == 1) n = "00" + n;
	else if(n.length() % 3 == 2) n = "0" + n;
	
	int len = n.length();
	
	for(int i=2; i<=len; i+=3) {
		int sum = 0;
		int bit_1 = n[i] - '0';
		int bit_2 = (n[i - 1] - '0') << 1;
		int bit_3 = (n[i - 2] - '0') << 2;
		
		sum = bit_1 + bit_2 + bit_3;
		result += to_string(sum);
	}
	
	cout << result << '\n';
	
	return 0;
}

일단 2진수에서 8진수로 바꾸는 법은 2진수의 3개의 bit를 8진수의 1개의 bit로 변환하는 것이다.

예를들어, 111101(2)라면, 111(2) / 101(2) 이렇게 3개씩 끊어서 10진수로 나타낸뒤 붙여주면 8진수가 된다.

따라서 75가된다.

 

하지만 2진수의 길이를 나눴을때 나머지가 생기는 경우가 발생할 수 있는데, 1이 남을경우엔 앞에 "0"을 붙여주고,

2가 남을경우엔 앞에 "00"을 붙여주면 수엔 변화가 없다.

 

그리고 위에서 bit연산이 사용되었는데, 예를들어 숫자 << n 은 숫자에 2의 n제곱만큼 곱해주겠다는 뜻이다.

shift연산이라고 하는데, 쉽게 말하면 2진수에서 왼쪽으로 한자리 옮겨간다고 생각하면된다.

따라서 예를들어 111(2)가 있으면 1*4 + 1*2 + 1*1 을 해주면된다.

그렇게 3자리씩 끊어서 다 더해준뒤 출력해주면 된다.

저작자표시 (새창열림)

'PS > 백준' 카테고리의 다른 글

백준 / 수학 / 2089번 / -2진수 / C++  (0) 2021.08.09
백준 / 수학 / 1212번 / 8진수 2진수 / C++  (0) 2021.08.08
백준 / 수학 / 17087번 / 숨바꼭질 6 / C++  (0) 2021.08.06
백준 / 수학 / 9613번 / GCD합 / C++  (0) 2021.08.05
    'PS/백준' 카테고리의 다른 글
    • 백준 / 수학 / 2089번 / -2진수 / C++
    • 백준 / 수학 / 1212번 / 8진수 2진수 / C++
    • 백준 / 수학 / 17087번 / 숨바꼭질 6 / C++
    • 백준 / 수학 / 9613번 / GCD합 / C++
    KimMinJun
    KimMinJun

    티스토리툴바