Etc/알고리즘

[백준] 2745

jjuni_96 2024. 6. 3. 23:17
728x90

 

문제

 

 

 

분석

1. 제한시간 1초 => 약 1억번만 계산 해야됨

2. ZZZZZ => (Z*36^4) + (Z*36^3)... + (Z*36^0)

    => 각 위치의 값 * binary^자리 의 합으로 계산하면 될듯...!

 

 

테스트 코드 1

import java.util.HashMap;
import java.util.Scanner;

public class BinaryScale {
    public static void main(String[] args) {
        // Scanner 생성
        Scanner sc = new Scanner(System.in);

        String[] text = sc.nextLine().split(" ");
        String num = text[0];
        int binary = Integer.parseInt(text[1]);
        sc.close();

        Long answer = 0L;
        for (int i = 0; i < num.length(); i++) {
            answer += (int)num.charAt(i) * (int)Math.pow(binary, num.length()-1-i);
        }

        System.out.println(answer);
    }
}

 

- 실패....

=> 0~9 까지의 범위를 아스키코드로 계산하니까 - 값이 나옴.... 

 

 

테스트코드 2

import java.util.HashMap;
import java.util.Scanner;

public class BinaryScale {
    // https://www.acmicpc.net/problem/2745
    // 1초라서 1억번 연산 하기 전에 끝내야함.
    // 아래 코드로 했을때 런타임 에러가 계속 나옴....
    // 어디서 오래걸리는걸까

    // int fNum = 0; 값을 for문 밖에 선언하니까  됬음...

    public static void main(String[] args) {
        long answer = 0;

        // Scanner 생성
        Scanner sc = new Scanner(System.in);

        String[] text = sc.nextLine().split(" ");
        sc.close();

        String num = text[0];
        int binary = Integer.parseInt(text[1]);
        for (int i = 0; i < num.length(); i++) {
            int fNum = 0;
            char c = num.charAt(i);
            if (c >= '0' && c <= '9') {
                fNum = c - '0';
            } else {
                fNum = c - 55;
            }
            answer += fNum * Math.pow(binary, num.length()-1-i);
        }

        System.out.println(answer);

    }
}

- 런타임 에러...

어디서 에러가 날지 한참 헤매다가 fNum의 값을 계속 생성하는 부분이 걸려서 밖으로 빼보니 해결됨...

=> 변수를 계속 생성하면 메모리를 계속 잡아먹는다는걸 간과했다...

 

728x90
반응형
LIST