Jinny Kong’s blog
18th Koala 4주차 본문
Koala 4주차를 완료했따 ⎝⍢⎠
이번주차는 저번주차에 비해 내용이 너무 어려웠ㄷr....
특히 진법변환 파트는 문제를 많이 풀어본 경험이 없어서 시간이 오래 걸렸고, 스택은 자료구조 시간에 했었던 구현을 다시 접해보니 또 어려웠다.... 헤헤 인간은 망각의 동물 ×͜×
여튼 오늘은 진법변환 문제 코드를 소개해보려 한다!! ʕتʔ
백준 2745번 : 진법 변환
B진법 수 N이 주어졌을 때, 이 수를 10진법으로 바꿔 출력하는 문제이다.
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
string N;
int B;
cin >> N >> B; // 진법 수 B, 문자열 N 입력
long long result = 0;
int len = N.length();
// 오른쪽(끝)부터 거꾸로 순회하며 pow(B, i) 사용
for (int i = 0; i < len; ++i) {
char ch = N[len - 1 - i]; // 끝에서 i번째 문자
int value;
if ('0' <= ch && ch <= '9') value = ch - '0'; // 숫자인 경우
else value = ch - 'A' + 10; // 알파벳인 경우
result += value * pow(B, i); // 거듭제곱을 곱해서 누적
}
cout << result << endl;
return 0;
}
먼저 내가 짠 코드는 이러하다!!
문자열을 오른쪽부터 순회하면서 각 자릿수마다 거듭제곱을 계산하는 방식이다. B^i를 곱한 값들을 모두 더해서 10진수로 변환하면 된다. 평소에 내가 10진법으로 변환할 때 실제로 사용하는 방법을 기준으로 직관적으로 구현하려고 했고, 따라서 내가 느끼는 코드에 대한 이해도는 높다. 그러나 pow() 함수는 매우 큰 숫자에서는 주의가 필요하고 조금 느릴 수 있다고 한다. 그래서 조금 더 효율적으로 짤 수 있는 방법이 있는지에 대해 알아보았다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string N;
int B;
cin >> N >> B; // 진법 수 B, 문자열 N 입력
long long result = 0;
// 왼쪽부터 한 자리씩 처리
for (char ch : N) {
int value;
if ('0' <= ch && ch <= '9') value = ch - '0'; // 숫자인 경우
else value = ch - 'A' + 10; // 알파벳인 경우
result = result * B + value; // 누적 계산 (기존 값에 B 곱하고 현재 자릿수 더하기)
}
cout << result << endl;
return 0;
}
이 방법은 문자열을 왼쪽부터 순회하면서 각 자릿수 값을 누적해가는 방식으로 구현한 코드이다. 기존 결과값에 *B를 하면서 자릿수를 올리고, 현재 문자의 값을 더한다. 문자열 길이에 관계없이 반복 1번만 돌면 되므로 속도가 빠르고 안정적이기 때문에 실제 프로그래밍 대회나 실무에서도 가장 많이 쓰이는 진법변환 방식이라고 한다!!
그치만 나에게는 result = result * B + value 이 누적 계산 식을 혼자서 이해하는데 많은 시간이 걸렸다..ㅜㅜ (내가 바보라 그럴수도..)
그래서 한 번 빠삭하게 이해해두고 저 식은 두고두고 외워서 써먹으려고 한다! ✌🏻·͜·✌🏻
4주차는 레전드 미룬이 + 어려움 이슈로 내가 처음부터 끝까지 직접 코드를 짠 문제가 많이 없는 것 같아 많이 아쉽다.... ( -̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥᷄д-̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥᷅ )
그래도 혼자서 구현하지 못한 문제들은 코드를 한줄한줄 이해해보려고 애썼다..... 비록 5주차는 2주 뒤겠지만, 중간고사를 언넝 끝내고 중요한 부분은(특히 스택...!!) 처음부터 끝까지 직접 한번씩 더 풀어봐야겠다!!! (진짜임)
그럼 4주차 끗~~! 중간고사 홧팅!!! ( ᴗ͈ˬᴗ͈)ഒ
미룬이 멈춰 ( ✋˙࿁˙ )
'KOALA' 카테고리의 다른 글
| 18th Koala 7주차 (1) | 2025.05.18 |
|---|---|
| 18th Koala 5주차 (1) | 2025.05.04 |
| 18th Koala 3주차 (4) | 2025.04.06 |
| 18th Koala 2주차 (1) | 2025.03.30 |
| 18th Koala 1주차 (0) | 2025.03.23 |