Etc/알고리즘

[백준] 11005

jjuni_96 2024. 6. 4. 22:32
728x90

문제

 

 

 

분석

- 10진수를 b로 나눈 나머지를 쌓는다.

- 0~9를 제외한 나머지들을 아스키로 변환

- 거꾸로 반환

 

 

테스트 코드1

package backjun.bronze;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        br.close();

        int num = Integer.parseInt(s.split(" ")[0]);
        int b = Integer.parseInt(s.split(" ")[1]);

        String answer = "";
        ArrayList<Integer> remain = new ArrayList<>();
        int share = num;

        while (true) {
            share = share / b;
            remain.add(num%b);
            if (share < b) {
                remain.add(share);
                break;
            }
        }

        for (int i = remain.size()-1; i >= 0; i--) {
            if (remain.get(i) >= 0 && remain.get(i) <= 9) {
                answer += remain.get(i);
            } else {
                answer += (char) (remain.get(i)+55);
            }
        }
        System.out.println("answer : " + answer);
    }
}

- 런타임 에러....?

   틀리거나, 시간 초과가 아니라 런타임 에러...?

- 시간 문제일 수도 있다는 생각에 코드 수정....

 

 

테스트코드2

package backjun.bronze;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        br.close();

		long startTime = System.nanoTime();
        int num = Integer.parseInt(s.split(" ")[0]);
        int b = Integer.parseInt(s.split(" ")[1]);

        String answer = "";
        ArrayList<Integer> remain = new ArrayList<>();
        int share = num;

        while (true) {
            share = share / b;
            remain.add(num%b);
            if (share < b) {
                remain.add(share);
                break;
            }
        }

        for (int i = remain.size()-1; i >= 0; i--) {
            if (remain.get(i) >= 0 && remain.get(i) <= 9) {
                answer += remain.get(i);
            } else {
                answer += (char) (remain.get(i)+55);
            }
        }
        System.out.println("answer : " + answer);
        long endTime = System.nanoTime();
        long timeElapsed = endTime - startTime;
        System.out.println("seconds : " + (double)timeElapsed / 1_000_000_000);
    }
}

- 또 런타임 에러....?

  시간 측정했을때 빨리 나와서 문제 없을줄 알았는데..... 이러고 한참을 헤맸다....

=> 천천히 코드를 확인해보니까  패키지 문제.......!

더보기

package backjun.bronze;

 

즉, 테스트 환경문제였다...

1. 백준 코드 확인

2. Intellij 소스코드 작성

3. Main class 수정 후 복/붙

4. 런타임 에러

 

프로그래머스를 주로 이용하다보니까 패키지를 직접 다 입력하는 환경이 익숙치 않다보니까 이런 문제가 발생한듯...

 

 

 

최종 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        br.close();

        long num = Long.parseLong(s.split(" ")[0]);
        int b = Integer.parseInt(s.split(" ")[1]);

        StringBuilder answer = new StringBuilder();
        while (share > 0) {
            if (num%b < 10) {
                answer.append(num%b);
            } else {
                answer.append((char) (num%b +55));
            }
            num /= b;
        }
        System.out.println(answer.reverse());

    }
}

- 마지막에 if문에 비교절을 잘못 적기도 했지만, 틀렸다고 나온것을 확인하고 수정하였음!!!

- StringBuilder를 사용한 이유는 마지막에 값을 reverse 하기 위해서 사용

 

728x90
반응형
LIST