728x90
● [문제번호 1212] 8진수 2진수
https://www.acmicpc.net/problem/1212
● 알아야 할 것
: 2진수를 8진수로 바꾸는 방법
: string to int 함수 → stoi( string )
: string 부분 자르기 메소드 → string.substr(start index, num)
● 풀이 과정
: 앞서 2진수 → 8진수의 문제를 풀고 나니 훨씬 수월한 문제이다.
(참고) https://pirateturtle.tistory.com/191
2진수 → 8진수로 바꾸는 방법을 반대로 사용하면 된다.
: 대신 출력할 때 8진수의 맨 앞자리 수가 2진수로 3자리일 지, 2자리일 지, 1자리일 지 모른다.
(예를 들어 3 → 011, 2 → 010, 1 → 001 인 경우가 있다.)
그래서 맨 앞자리만 따로 작업해야하고
8진수의 2번째 자리부터는 2진수로 출력할 때 0까지 모두 출력하면 된다.
● 주의 할 것
: 입력되는 data의 범위를 고려하여 어떤 자료형을 선언할 지 고민해야한다.
● 참고 할 것
: 8진수를 2진수로 바꿀 때 3자리로 표현되는 법의 이해
https://m.blog.naver.com/icbanq/221727893563
● 풀이 코드
#include <bits/stdc++.h>
using namespace std;
// 주어지는 수의 길이가 333,334 까지 갈 수 있으므로 문자열로 받는다
string str;
int N;
// 8진수를 2진수로 바꾸는 함수
void change_8_to_2(int n)
{
// 2진수의 3자릿수는 8진수의 1자리이다
cout << (n / 2 / 2 % 2);
cout << (n / 2 % 2);
cout << (n % 2);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 주어지는 수 입력
cin >> str;
// 8진수의 맨 앞자리만 따로 출력
// 2진수로 바꿨을 때 011, 001과 같은 출력을 막기 위함
int first_num = stoi(str.substr(0, 1));
if(first_num >= 4)
cout << (first_num / 2 / 2 % 2);
if(first_num >= 2)
cout << (first_num / 2 % 2);
cout << (first_num % 2);
// 8진수의 1자리씩 2진수의 3자리로 바꿔 출력
for(int s = 1; s < str.length(); s++)
change_8_to_2(stoi(str.substr(s, 1)));
return 0;
}
● [백준] - [알고리즘 기초 1/2] - [301 - 수학 1 (연습)] 문제집
번호 | 문제 번호 | 문제 이름 | 풀이 링크 |
1 | 9613 | GCD 합 | https://pirateturtle.tistory.com/189 |
2 | 17087 | 숨바꼭질 6 | https://pirateturtle.tistory.com/190 |
3 | 1373 | 2진수 8진수 | https://pirateturtle.tistory.com/191 |
4 | 1212 | 8진수 2진수 | https://pirateturtle.tistory.com/192 |
5 | 2089 | -2진수 | https://pirateturtle.tistory.com/193 |
6 | 17103 | 골드바흐 파티션 | https://pirateturtle.tistory.com/194 |
728x90
'Baekjoon > [Code.plus] 알고리즘 기초 1/2' 카테고리의 다른 글
[BOJ/백준] 11005 진법 변환 2 (0) | 2021.07.29 |
---|---|
[BOJ/백준] 17103 골드바흐 파티션 (0) | 2021.07.29 |
[BOJ/백준] 2089 -2진수 (0) | 2021.07.29 |
[BOJ/백준] 1373 2진수 8진수 (0) | 2021.07.29 |
[BOJ/백준] 17087 숨바꼭질 6 (0) | 2021.07.29 |
[BOJ/백준] 9613 GCD 합 (0) | 2021.07.29 |
[BOJ/백준] 2004 조합 0의 개수 (0) | 2021.07.28 |
댓글