BufferedReader를 쓰면서 문자열을 숫자 값으로 전환하는 일이 많았다. 그래서 Integer.parseInt()가 자연히 몸에 배어있었는데, 이게 특정 진법으로 해석해 숫자 값을 뱉는 친구라는 건 오늘에서야 알았다. (지능 이슈)
변명이지만 지금까지 진법 자체를 다룰 일이 딱히 없었기도 하고, 아무튼 단순히 Int로 파싱 하는 거라 생각했는데, 아래와 같이 기수를 입력하면 해당 진법으로 해석해 값을 뱉어낸다.
Integer.parseInt(Stirng, base)
// 2진법
Integer.parseInt("1010", 2); // -> 10 반환
// 8진법
Integer.parseInt("12", 8); // -> 10 반환
// 16진법
Integer.parseInt("A", 16); // -> 10 반환
*기수 부분을 생략한 경우에는 10진법이 디폴트가 되어 파싱한다.
참고로, 자바와 자바스크립트에서는 기본적으로 2부터 36 사이 기수만 지원한다. 이유는 0-9와 A-Z까지, 총 36개의 문자까지만 표현할 수 있기 때문이다. (parseInt는 알파벳 대소문자를 구분하지 않는다.)
물론 그 이상에 대해 문자 집합을 확장하여 진행하는 방법도 있지만, 표준 라이브러리에서 지원하지 않아 불편할 뿐더러, 현실적으로 2진법, 8진법, 10진법, 16진법을 제외하고는 쓸 일이 없다.
// https://www.acmicpc.net/problem/1550
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.next();
System.out.println(Integer.parseInt(input, 16));
}
}
'개인학습 > 알고리즘' 카테고리의 다른 글
[Java] BOJ 18870: 좌표 압축과 랭킹 알고리즘 (1) | 2025.02.24 |
---|---|
[Java] BOJ 18258: LinkedList vs ArrayDeque (2) | 2025.02.21 |
[Java] BOJ 13909: 창문 닫기와 힙 메모리 한도 (1) | 2025.02.17 |
[Java] BOJ 1654: 이진 탐색, 이분 탐색 (Binary Search) (1) | 2025.02.07 |
[Java] BOJ 11866: 요세푸스 문제, 큐 (1) | 2025.02.05 |