KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (487)
    • 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 (432)
      • 백준 (187)
      • Programmers (105)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/백준

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

2021. 8. 8. 22:45

문제

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

입력

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

출력

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.

예제 입력 1 

314

예제 출력 1 

11001100

 

#include <iostream>
#include <stack>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	
	stack<int> s;
	string n;
	cin >> n;
	
	if(n == "0") cout << 0 <<'\n';
	
	else {
		int len = n.length();
		for(int i=len-1; i>=0; i--) {
			int num = n[i] - '0';
			for(int j=0; j<3; j++) {
				s.push(num % 2);
				num /= 2;
			}
		}
	
		while(!s.top()) {
			s.pop();
		}
		while(!s.empty()) {
			cout << s.top();
			s.pop();
		}	
	}
	
	
	return 0;
}

이문제 상당히 애먹었다....

잘 구해지는데 첫번째에 0이 아닌 다른수가 오면 무조건 1로 시작해야한다던가....

아니면 출력도 잘됬는데 테스트 케이스에 반례가있다던가해서 상당히 오래걸렸다.

결국 다른 풀이를 참조해서 stack으로 해봤다.

물론 배열에 미리 각 8진수의 1bit에 대응되는 2진수의 수를 미리 넣어놓으면 시간과 메모리가 단축되겠지만,

그냥 그렇게 풀고싶지않아서... 이렇게 풀었다.

 

2진수 구하는 알고리즘은 간단하다.

하지만 맨앞에 0이올경우 그걸 지워줘야하는데 스택에 push해준 반대순서대로 pop이 되기때문에

일단 처음 1이 나올때까지 다 pop을 해주었다.

그리고 하나씩 top을 출력하면서 pop을 해주면된다.

저작자표시 (새창열림)

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

백준 / 수학 / 17103번 / 골드바흐 파티션 / C++  (2) 2021.08.10
백준 / 수학 / 2089번 / -2진수 / C++  (0) 2021.08.09
백준 / 수학 / 1373번 / 2진수 8진수 / C++  (0) 2021.08.07
백준 / 수학 / 17087번 / 숨바꼭질 6 / C++  (0) 2021.08.06
    'PS/백준' 카테고리의 다른 글
    • 백준 / 수학 / 17103번 / 골드바흐 파티션 / C++
    • 백준 / 수학 / 2089번 / -2진수 / C++
    • 백준 / 수학 / 1373번 / 2진수 8진수 / C++
    • 백준 / 수학 / 17087번 / 숨바꼭질 6 / C++
    KimMinJun
    KimMinJun

    티스토리툴바