코딩테스트

[백준/1009/분산처리]

개발하는지호 2024. 3. 19. 00:29

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

 

1009번: 분산처리

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

www.acmicpc.net

 

 

<<풀이 >>

 

두가지 방식으로 풀었는데 향상된 for문을 쓰냐 안 쓰냐 차이일 뿐이다 ㅋㅋ

 

이 문제는 Math.pow의 원리를 파악하고 있어야 하고 Math.pow를 이용하면 기본적으로 double 타입이 되므로 int로 구하고자 하면 캐스팅을 해줘야 한다는 것을 인지해야한다.

 

또한, 규칙으로 인해 특정 범위까지 가면 다시 처음 부터 시작하게 하는 % 로 나머지 구하는 방법을 사용할 때 유의할 점이 있다.

바로 다시 처음으로 돌아가기전!! 이때 0이 되는데 이 0은 가장 마지막 값이다.  즉 0이 나오면 안 되고 0 + 처음으로 가기전의 값 이 들어가야한다.

 

이러한 부분만 조심해서 구현한다면 바로 풀 수가 있다.

import java.util.Scanner;

class Data {
    int a;
    int b;
    public Data(int a, int b) {
        this.a = a;
        this.b = b;
    }
}

class Main {

    private int[] solution(Data[] data, int n) {
        int[] answer = new int[n];
        for (int i = 0; i < n; i++) {
            int exp = data[i].b % 4 == 0 ? 4 : data[i].b % 4; // b % 4가 0일 경우 4를 사용
            int result = (int) (Math.pow(data[i].a, exp) % 10);
            answer[i] = result == 0 ? 10 : result;
        }
        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        Data[] data = new Data[n];
        for (int i = 0; i < n; i++) {
            data[i] = new Data(in.nextInt(), in.nextInt());
        }
        for (int x : T.solution(data, n)) System.out.println(x);
    }
}

 

import java.time.chrono.MinguoDate;
import java.util.Scanner;

class Data {
    int a;
    int b;
    public Data(int a, int b) {
        this.a = a;
        this.b = b;
    }
}

class Main {

   private int[] solution(Data[] data, int n) {
       int[] answer = new int[n];
       int index = 0;
        for (Data x : data) {
            int exp = x.b % 4 == 0 ? 4 : x.b % 4;
            answer[index++] = (int) (Math.pow(x.a, exp) % 10 == 0 ? 10 : Math.pow(x.a, exp) % 10);
        }
        return answer;
   }

    public static void main(String[] args){
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        Data[] data = new Data[n];
        for (int i = 0; i < n; i++) {
            data[i] = new Data(in.nextInt(), in.nextInt());
        }
        for (int x : T.solution(data, n)) System.out.println(x);


    }
}