Algorithm

[Java] 백준 14928번 큰 수(BIG)

로춘남 2021. 12. 2. 16:13
728x90


https://www.acmicpc.net/problem/14928

 

14928번: 큰 수 (BIG)

첫째 줄에 제연이가 가장 좋아하는 수 N이 주어진다. (N ≤ 101,000,000)

www.acmicpc.net

초심부터 시작해보는 알고리즘 공부..!

브론즈 4-5정도는 기초적인 문제가 많아서, 굳이 블로그에 풀이는 안쓸것 같고, 풀다가 '어?' 이랬던 부분을 다시 언급해보고자 한다.

import java.io.*;

public class BJ14928 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        //StringTokenizer st = new StringTokenizer(br.readLine());

        //시간초과가 나온 코드
        /*BigInteger N = new BigInteger(st.nextToken());
        BigInteger M = new BigInteger("20000303");

        System.out.println(N.remainder(M));*/

        //나머지 연산 방법
        String N = br.readLine();
        long remain = 0;
        for(int i =0; i < N.length(); i++){
            remain = (remain * 10 + (N.charAt(i) - '0')) % 20000303;
        }
        bw.write(remain + "\n");
        bw.flush();
        br.close();
        bw.close();
    }
}

해당 코드 처음에 입출력으로 잘 풀었는데, 결과값이 계속 시간초과가 나와서 오답처리가 되었다.

으응..? 뭐지 뭐지 하다가 나머지 연산 방법이라는것을 알게됨.

remain 부분에서 10을 곱하는게 처음에 이해되지 않았는데, 저 10의 용도는 자리수를 올려주는것으로 확인되었다.


Java에서 charAt(int i) - '0'에 대해 조금더 살펴보았는데, 앞서 말한것처럼 charAt는 자바의 문자열을 index 값을 통해 읽는 방법이다. 예를들어

String str = "로춘남입니다"; 라고 되어 있으면

str.charAt(0); //로

str.charAt(1); //춘

str.charAt(2); //남

 

이런식으로 되는 것. 그렇다면 이것을 숫자로 한 번 가져와 본다면?

 

String str = "12345";

str.charAt(0);은 1이 출력된다. 여기서의 1은 문자로서의 1. 여기서 문자 1을 숫자로 1로 바꾸고싶다면?

이 문자 1은 chat형이기 때문에 int형으로 변환을 해주면 아스키코드값으로 변환이 된다.

그렇기때문에 str.charAt(0); '1'의 값을 int형으로 변환시키면 아스키코드값인 49가 나오게 되는것이다. 

하지만 우리가 구하고싶은값은 1. 49가 1이 되기 위해선 -48을 해줘야한다.

그래서 우리가 해주는것이 바로 -'0' . 왜냐하면 '0'의 아스키코드값이 바로 48이기때문이다.

 

즉,

숫자1 → 49

숫자2 → 50

숫자3 → 51

 

'0'인 48을 빼주게 되면

 

각각 1, 2, 3이 되는 것이다!!

 

우오옹!!!

 

728x90

'Algorithm' 카테고리의 다른 글

[Java] 백준 5575번 타임 카드  (0) 2021.12.23
[Java] 백준 5543번 상근날드  (0) 2021.12.23
[Java] 백준 2420번  (0) 2021.11.04
[Java] 백준 1712번 손익분기점  (0) 2021.11.03
[Java] 백준 1297번 TV 크기  (0) 2021.11.03