목차
백준 단계별로 풀어보기
25.09.06
8단계: 수학 1
11005번: 진법 변환 2
문제 링크 : https://www.acmicpc.net/problem/11005
문제 풀이
>> 문제를 풀기 위해 알아야 할 개념
- 10진법을 x진법으로 변환하는 방법
: 나머지 연산을 사용하여 10진법 수를 변환하고자 하는 진법 값으로 나눈 나머지를 뒤에서부터 표기하면 변환할 수 있다.
→ 예시
※ 참고한 블로그
진법의 의미, 그리고 2진법, 8진법, 16진법, 10진법 변환 원리와 방법
진법(위치값 기수법)의 의미, 그리고 2진법, 8진법, 16진법, 10진법 변환 원리와 방법 목차1. 진법이란2. x진법(2진법, 8진법, 16진법, 10진법)3. 진법 간 변환 원리, 방법x진수 → 10진수10진수 →
dlxdlx.tistory.com
- StringBuilder.Insert(Index, 개체)
: 지정된 개체의 문자열 표현을 지정된 Index 번호에 삽입한다.
--> 이를 활용하여 10진법 수를 x진법으로 변환할 때, 계속 Index 0번에 삽입하여 계산한 값이 뒤에서부터 순차적으로 입력되도록
※ 공식 문서 - StringBuilder.Insert
StringBuilder.Insert 메서드 (System.Text)
지정된 개체의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다.
learn.microsoft.com
- 아스키 코드 표
>> 풀이
- 10진법 수 N과 B진법의 B를 나눠서 입력 받은 뒤, 둘다 int로 변환하여 저장한다.
- while 반복문을 통해 N을 B로 나눈 몫이 0이 될 때까지 즉, N이 B보다 작아질 때까지 N을 B로 나눈 나머지를 구한다.
- N을 B로 나눈 나머지가 10보다 작을 경우, 0~9로 표현할 수 있기 때문에 바로 StringBuilder.Insert를 통해 Index 0번 즉, 가장 앞에 값을 삽입한다.
- N을 B로 나눈 나머지가 10보다 클 경우, A~Z로 표현해야 하기 때문에 임시값으로 문자 변수를 선언하고 아스키코드에 따라 나머지에 55만큼 더해준 다음 StringBuilder.Insert를 통해 Index 0번 즉, 가장 앞에 값을 삽입한다.
- N을 B로 나눈 값을 N에 대입하여 계속 반복할 수 있도록 한다.
- while 반복문을 빠져나오면 마지막으로 N을 위와 같은 원리로 StringBuilder.Insert를 통해 Index 0번 즉, 가장 앞에 값을 삽입한다.
- 모든 연산을 마친 값을 출력한다.
정답 코드
using System.Text;
class Backjoon
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
string[] input = Console.ReadLine().Split();
int num = int.Parse(input[0]);
int formation = int.Parse(input[1]);
while (num / formation > 0)
{
if (num % formation < 10)
sb.Insert(0, num % formation);
else
{
char ch = (char)(num % formation + 55);
sb.Insert(0, ch);
}
num /= formation;
}
if (num < 10)
sb.Insert(0, num);
else
{
char ch = (char)(num + 55);
sb.Insert(0, ch);
}
Console.Write(sb.ToString());
}
}
'Development > Baekjoon' 카테고리의 다른 글
[C#] 2903번: 중앙 이동 알고리즘 (0) | 2025.09.09 |
---|---|
[C#] 2720번: 세탁소 사장 동혁 (0) | 2025.09.08 |
[C#] 2745번: 진법 변환 (0) | 2025.09.04 |
[C#] 2563번: 색종이 (0) | 2025.09.03 |
[C#] 10798번: 세로읽기 (0) | 2025.09.02 |