반응형

백준 1009번 문제입니다. (solved.ac) 기준 브론즈 2 문제입니다.

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

 

1009번: 분산처리

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

www.acmicpc.net

문제

문제 접근

데이터의 개수는 a^b개이고 컴퓨터는 총 10개를 가지고 있습니다. 1번째 일은 1번 컴퓨터가, 2번째 일은 2번 컴퓨터가... 10번째 일은 4번 컴퓨터가, 11번째 일은 1번째 컴퓨터가 하게됩니다. 이를 통하여 데이터의 개수에서 일의 자릿수에 해당하는 번호의 컴퓨터가 작업을 한다는 것을 알 수 있습니다. 따라서 입력 받은 a^b를 계산해준 후 일의 자리만 출력해주면 됩니다. 단, 일의 자릿수가 0일 경우에는 10번째 컴퓨터가 작업하는 부분에 대해서는 예외처리를 해주어야합니다!
그냥 제곱을 진행하는 경우 - ex) 9^635 와 같은 경우 - 는 오버플로우가 발생하기 때문에 매번 연산할 때마다 일의 자릿수만 저장하도록 하였습니다.

정답 코드

fun main() {

    repeat(readln().toInt()) {

        var (a, b) = readln().split(" ").map { it.toInt() }

        // ^n(n승)을 계산하고 일의 자리만 담을 변수. - 그렇지 않으면 오버플로우 발생함.
        var afterPowered = a % 10

        repeat(b - 1) {
            // ^n(n승)을 계산
            afterPowered *= a
            // 일의 자리만 저장
            afterPowered %= 10
        }

        // 컴퓨터가 총 10대니까 일의 자릿수만큼 돌아감. - afterPowered가 0이라면 딱 맞아떨어지기 때문에 10번 컴퓨터가 동작
        if (afterPowered == 0) println(10) else println(afterPowered)

    }
}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기