일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 닌텐도 스위치 2
- 이진 탐색
- 코딩테스트
- VRoid Studio
- 마인크래프트
- 잴다의 전설 티어스 오브 더 킹덤
- i자형 인재
- 택시 기하학
- unity engine
- 그래픽 디자인
- Probuilder
- 영어
- 다이나믹프로그래밍
- vrm posing desktop
- 자료구조
- 카니발대학교 공대강국
- 배열 리스트
- 브루트포스 알고리즘
- blender
- 그리디 알고리즘
- URP
- 2025 대한민국 채용박람회
- 빅오 표기법
- c#
- 병역일터
- 스택
- 라자냐
- 큐
- windows 12
- 시작
- Today
- Total
WalkerJei's Lifelog
백준알고리즘 2745번 진법 변환 C# 본문
세부 정보
- 사이트: 백준알고리즘
- 번호: 2745
- 문제명: 진법 변환
- 언어: C#
- 분류: 수학, 구현, 문자열
- 비고:
문제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
출력
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
풀이
아스키 코드로 0은 48, 9는 57, A는 65, Z는 90이다.
Math.Pow()를 사용해 제곱을 구할 수 있지만 실수인 double 형태로 값을 반환하므로 형 변환을 (int)로 해 주었다.
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
// 특정 진법의 수를 10진수로 변환
int ToDecimal(string n, int b)
{
// 특정 진법 상태의 수
int[] before = new int[n.Length];
// 진법 변환을 위한 수
int[] bInfo = new int[n.Length];
// 10진수로 바뀐 수
int after = 0;
for (int i = 0; i < n.Length; i++)
{
// 0부터 9까지의 수를 변환
if (n[i] >= 48 && n[i] <= 57)
before[i] = Convert.ToInt32(n[i]) - 48;
// A(10)부터 Z(35)까지의 수를 변환
if (n[i] >= 65 && n[i] <= 90)
before[i] = Convert.ToInt32(n[i]) - 55;
// 진법 변환을 위해 입력한 수 세팅
bInfo[i] = (int) Math.Pow(b, n.Length - 1 - i);
}
// 10진수로 변환하는 과정
for (int i = 0; i <n.Length; i++)
after += (before[i] * bInfo[i]);
// 변환한 10진수 반환
return after;
}
// 특정 진법의 숫자와 진법을 입력받는다.
string input = sr.ReadLine();
// 특정 진법의 숫자를 추출해 저장한다.
string n = input.Split()[0];
// 진법 정보를 추출해 저장한다.
int b = Convert.ToInt32(input.Split()[1]);
// 10진법으로 변환한 수 출력
sw.WriteLine(ToDecimal(n, b));
sr.Close();
sw.Close();
후기
문제를 풀면서 의존도 단계가 생각났다.
1단계: 문제를 푼 언어로 된 답을 보고 배울 때
2단계: 다른 언어로 된 답을 보고 번역해서 배울 때
3단계: 답이 아니라 간접적인 힌트를 사용해서 배울 때
4단계: 간접적인 힌트는 없지만 자동완성을 사용해서 문제를 풀었을 때
5단계: 간접적인 힌트와 자동완성 없이 문제를 풀었을 때
예시:
1단계: C#으로 문제를 풀 때 다른 사람이 쓴 C# 코드에서 피드백을 받았다.
2단계: C#으로 문제를 풀 때 다른 사람이 쓴 Java 코드에서 피드백을 받고 C# 환경에 맞게 번역했다.
3단계: C#으로 문제를 풀 때 컴퓨터 과학 이론 서적, 기술 문서 등을 참조해서 답을 썼다.
4단계: C#으로 문제를 풀 때 머릿속에 있는 지식을 활용했지만 개발 환경의 자동완성 기능의 도움을 받았다.
5단계: C#으로 문제를 풀 때 머릿속의 지식을 활용하고, 자동완성 기능을 사용하지 않았다.
지금 이 문제를 풀었을 때 의존도 단계는 3이었다. 타인의 소스 코드를 보지는 않았지만 아스키 코드표를 인터넷 검색으로 참조했기 떄문이다. 코딩테스트 개발환경에 따라 5단계 정도의 수준이 필요할 때도 있다. 목표하는 단계는 적어도 4단계 이상은 되어야 한다. 이 외에도 Math.Pow()가 정수가 아니라 실수 상태의 값을 반환한다는 것을 확인하면서 충격받았다. 보통은 Math.Pow() 함수의 괄호 안에서 ,를 기준으로 앞에는 정수를 포함한 실수, 뒤에는 정수만 들어갈 수 있다고 생각했었다. 그런데 뒤에 정수가 아닌 실수도 들어갈 수 있어서 놀랐다. 2^3.3이 가능하다는 의미다.
'소프트웨어 개발 > 코딩테스트(기성 문제)' 카테고리의 다른 글
백준알고리즘 11279번 최대 힙 C# (0) | 2025.04.23 |
---|---|
백준알고리즘 3053번 택시 기하학 C# (0) | 2025.04.23 |
백준알고리즘 2455번 지능형 기차 C# (0) | 2025.04.20 |
백준알고리즘 5597번 과제 안 내신 분..? C# (1) | 2025.04.19 |
백준알고리즘 1100번 하얀 칸 C# (0) | 2025.04.18 |