백준 재활치료 (4) A + B - 투 스텝 (31430)

hipop1109·2026년 1월 27일

이번엔 처음 풀어보는 투 스텝 문제이다

저 13자리 숫자에 매몰되어 있다가 각각 알파벳에 따른 26진수로 묶고 다시 26진수로 풀어서 내보내면 될 것이라고 생각을 했다

그래서 만든 코드는

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

int main() {
	int T;
	long long A, B;
	int C;
	string a(13, 'a');
	string b = "";

	cin >> T;

	if (T == 1) {
		cin >> A >> B;
		long long Sum;
		Sum = A + B;

		int index = 0;
		while (Sum > 0 && index < 13) {
			int r = Sum % 26;
			a[index] = char('a' + r);
			Sum /= 26;
			index++;
		}

		if (a.length() != 13) {
			string as = "";
			for (int i = 0; i < 13 - a.length(); i++) {
				as += 'a';
			}
			a = as + a;
		}
		cout << a;
	}
	else if (T == 2) {
		cin >> b;

		int count = 0;
		while (count < b.size() && b[count] == 'a') {
			count++;
		}

		if (count == 13) {
			cout << "0";
			return 0;
		}

		string as = b.substr(count);
		long long result = 0;
		long long mul = 1;

		for (int i = 0; i < 13; i++) {
			int dig = b[i] - 'a';
			result += dig * mul;
			mul *= 26;
		}
		cout << result;
	}
}

우선 a가 13개 들어있는 string문을 만든다
우선 T == 1일 때 A, B를 받은 후 Sum을 구한다
그리고 앞자리부터 변환해서 남은 뒷자리가 a인 26진수를 만들어서 보관해놓는다

풀다가 수정한게 남아서 13이 아닐 경우가 남아있는데 어차피 절대 못 이뤄질 조건문이라 패스해도 무방할듯
그래서 a를 전체 출력한 후 다시 T가 2일 때

b를 입력받을 시
일단 전체 다 a일 때는 무조건 0을 출력하고 끝내버린다
count는 뒷자리 a를 싹 뺄 목적으로 계산한 변수이다
그래서 깔끔히 정리된 as를 가공하는 과정으로 진행이 될 것이다

우선 결과를 넣을 result랑 변환에 핵심이 되는 mul을 지정한 후
result에 첫 자리부터 mul * 변환 숫자값을 한 후
mul에 26을 곱해 다시 더하는 방식으로 26진수를 해체한다

그렇게 되면 결과값을 뽑아낼 수 있다
잘 읽으면 풀기 그렇게 어렵지는 않았던거 같다

profile
쑥쑥 개발자

0개의 댓글