_

Always be tactful

개인학습/알고리즘

[Java] BOJ 1550: Integer.parseInt()

funczun 2025. 2. 19. 02:19

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));
    }
}