문제
타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다.
미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다.
500년 후의 세계에서도 프로그래밍을 하고 싶었던 정이는 백준 사이트에 접속하여 문제를 풀기로 하였다.
그러나 미래세계는 A진법을 사용하고 있었고, B진법을 사용하던 정이는 문제를 풀 수가 없었다.
뛰어난 프로그래머였던 정이는 A진법으로 나타낸 숫자를 B진법으로 변환시켜주는 프로그램을 작성하기로 하였다.
N진법이란, 한 자리에서 숫자를 표현할 때 쓸 수 있는 숫자의 가짓수가 N이라는 뜻이다.
예를 들어 N은 17일 때 한 자릿수에서 사용할 수 있는 수는 0, 1, 2, ... , 16으로 총 17가지가 된다.
입력
입력의 첫 줄에는 미래세계에서 사용하는 진법 A와 정이가 사용하는 진법 B가 공백을 구분으로 주어진다.
A와 B는 모두 2이상 30이하의 자연수다.
입력의 두 번째 줄에는 A진법으로 나타낸 숫자의 자리수의 개수 m(1 ≤ m ≤ 25)이 주어진다.
세 번째 줄에는 A진법을 이루고 있는 숫자 m개가 공백을 구분으로 높은 자릿수부터 차례대로 주어진다.
각 숫자는 0이상 A미만임이 보장된다. 또한 수가 0으로 시작하는 경우는 존재하지 않는다.
A진법으로 나타낸 수를 10진법으로 변환하였을 때의 값은 양의 정수이며 220보다 작다.
출력
입력으로 주어진 A진법으로 나타낸 수를 B진법으로 변환하여 출력한다.
예제 입력 1
17 8
2
2 16
예제 출력 1
6 2
#include <iostream>
#include <cmath>
#include <stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int a, b; // a진법 -> b진법
int m; // a진법 자리수의 개수
int a_to_decimal = 0;
cin >> a >> b;
cin >> m;
for(int i=m-1; i>=0; i--) {
int num;
cin >> num;
a_to_decimal += num * pow(a, i);
}
stack<int> s;
while(a_to_decimal) {
s.push(a_to_decimal % b);
a_to_decimal /= b;
}
while(!s.empty()) {
cout << s.top() << " ";
s.pop();
}
cout << '\n';
return 0;
}
밑의 두문제를 해결했다면 쉽게 생각하고 쉽게 풀 수 있는 문제이다.
2021.08.12 - [ALGORITHM/백준] - 백준 / 수학 / 2745번 / 진법 변환 / C++
2021.08.11 - [ALGORITHM/백준] - 백준 / 수학 / 11005번 / 진법 변환 2 / C++
일단 문제부터 간략히 설명하자면 이렇다.
a진법을 b진법으로 바꿀건데, a진법의 자릿수의 개수가 몇개인지 입력받고 그 자릿수의 개수만큼 a진법을 자릿수마다 각각 입력을받아서 10진법으로 바꾼후 b진법으로 다시바꿔서 출력하는 문제이다.
예를들어
10 2
2
4 3
을 입력받았다면 10진법을 2진법으로 바꾸겠다는 말이고,
10진법의 자릿수의 개수가 2개라는 말이다.(즉 10의0제곱 자리, 10의1제곱자리 총 2개라는 말이다)
따라서 여기선 10진법 43을 입력받았고, 이거를 2진법인 101011로 바꾸겠다는 말이다.
위 코드에선 for문은 10진법으로 바꾸는 코드이고, while문은 10진법을 b진법으로 바꾼후 스택에 넣은다음,
하나씩 출력하고 pop하는 코드이다.
pow(a, b)는 C++에선 cmath 헤더를 삽입해야하고 C에서는 math.h헤더를 삽입해야 한다.
pow(a, b)는 a의 b제곱을 나타내주는 메서드이다.
'PS > 백준' 카테고리의 다른 글
백준 / 다이나믹 프로그래밍 / 1463번 / 1로 만들기 / C++ (0) | 2021.08.16 |
---|---|
백준 / 수학 / 11653번 / 소인수분해 / C++ (0) | 2021.08.14 |
백준 / 수학 / 2745번 / 진법 변환 / C++ (0) | 2021.08.12 |
백준 / 수학 / 11005번 / 진법 변환 2 / C++ (0) | 2021.08.11 |