Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Spring
- 내일배움캠프
- 프로그래머스
- SpringBoot
- web
- OOP
- 프로젝트
- 객체지향
- BFS
- 이분탐색
- Generics
- 구현
- 코딩테스트
- ES
- binary search
- Algorithm
- parametric search
- Java
- 브루트포스
- CSS
- programmers
- 이분 탐색
- til
- 계산기 만들기
- Baekjoon
- Elasticsearch
- 백준
- 누적합
- 완전탐색
- 알고리즘
Archives
- Today
- Total
개발하는 햄팡이
[JAVA][백준 11005] 진법 변환2 본문
문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
예제 입력 1
60466175 36
예제 출력 1 복사
ZZZZZ
풀이
진법 변환의 전통적인 방법인 반복문로 계속 나누기....그 왜 어렸을 때 흔히 우리가 2진법으로 바꿀때 몫을 가지고 계속 나누는데 더이상 나누어 지지 않을때까지 하는 그 방법을 코드로 옮기는 방법으로 풀려고 한다.
최대값이 1,000,000,000 이고 그걸 2진법으로 바꾼다고 해도 연산은 27번 정도(맞나?) 걸리기 때문에 시간 제한으로 걸려있는 0.5초는 충분히 통과할 것 같아서 해당 방법으로 푸는 것에는 문제가 없지만
그 결과를 char 형태로 만드는 부분이 조금 헷갈려서 고민을 좀 했다.
그래서 일단 char로 바꾸는 방법은 그냥 0부터 9까지는 (바꾸려는 num) + '0'으로 숫자로 저장하고 그 이상을 알파벳 대문자로 저장하는 기본적인 방법으로 풀었다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 10진법 수
int B = sc.nextInt(); // 표현할 진법의 수
StringBuilder sb = new StringBuilder();
while (N > 0) {
int num = N % B; // 나머지 값.
N /= B; // 그 다음으로 넘어가기
// num을 진법으로 바꾸어 char 형태로 저장
if (num < 10) {
sb.append((char) (num + '0')); // 0-9의 경우 숫자 그대로
} else {
sb.append((char) (num - 10 + 'A')); // 10-35의 경우 A-Z로 변환
}
}
// 저장된 sb를 뒤집어 출력
System.out.println(sb.reverse());
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[JAVA][백준 3085] 사탕 게임 (2) | 2024.06.11 |
---|---|
[JAVA][백준 11068] 회문인 수 (0) | 2024.06.10 |
[JAVA][백준 10448] 유레카 이론 (0) | 2024.06.08 |
[JAVA][백준 2309] 일곱 난쟁이 (0) | 2024.06.03 |
[JAVA][백준 4948] 베르트랑 공준 (1) | 2024.04.19 |