[백준] 1009 분산처리 JAVA

·2024년 2월 24일

1일1백준 -Java-

목록 보기
2/60

문제

재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.

1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,

10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...

총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.

입력

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)

출력

각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.

예제 입력

5
1 6
3 7
6 2
7 100
9 635

예제 출력

1
7
6
1
9

내가 했던 풀이 방법

  1. Math.pow를 이용하여 값을 계산하고, String으로 변환 후 마지막 문자를 출력하자.
    -> b가 1,000,000까지 입력 가능. (오버플로우 발생)
  2. BigInteger를 이용하여 값을 계산하자.
    -> 틀림 (메모리 초과)
  3. a를 곱해줄 때마다 10을 나눈 나머지로 값을 바꿔준다. 예를 들면 a가 4일 때, 4 16 64 256 1024 (규칙 발견)
    -> 성공

코드

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

public class Main {
    public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int number = Integer.parseInt(br.readLine());
        String[] string;

        for(int i=0; i<number; i++) {
            string = br.readLine().split(" ");
            int a = Integer.parseInt(string[0]);
            int b = Integer.parseInt(string[1]);
            int computer = 1;
            for(int j=0; j<b; j++) {
                computer = (computer * a) % 10;
            }
            if(computer==0) {
                computer=10;
            }
            System.out.println(computer);
        }
    }
}

이 코드에 중요한 건, 일의 자리가 0일 때 값을 10으로 처리해줘야 한다. 0번 컴퓨터는 없으니까. (내가 놓쳐서 적어놓는 건 맞음)

회고

1년 가까이 백준 안 풀었음 + 이클립스에서 VSCode로 에디터 바꿈 + 2달동안 JS코드만 작성하다 옴 이슈로 JAVA 풀이가 정말정말정말 안 되고, 메소드도 기억도 안 나서 실버4 풀다가 급하게 바꿨다. 4년동안 이클립스만 쓰다가 에디터 바꾼 게 너무 적응이 안 되는 게 은근 컸다. 다양한 에디터를 경험해보는 것도 중요하겠구나를 느꼈음. 너무 우물 안 개구리된 느낌. (적고 보니 핑계같지만) 그리고 문제를 너무 직관적으로 바라본 게 너무 아쉽다. 규칙만 발견했으면 금방 해결했을텐데 기존 방법은 쓸데없이 String/char로 형변환도 너무 잦았고, 좋은 코드가 아니였을 법한데 굳이굳이 잡고있던 게 아쉽지만.. 이제 백준을 또 다시 습관화하다보면 풀이가 익숙해질거라 생각한다. 당분간은 브론즈 문제 풀면서 기억을 되살려야겠다.

profile
Frontend🍓

0개의 댓글