[백준]1009번:분산처리

김잭앙·2022년 12월 22일
0

백준

목록 보기
1/5

[백준]1009번:분산처리
https://www.acmicpc.net/problem/1009


문제

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

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

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

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


입력

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


출력

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


문제 해석

글이 길어서 처음에 헷갈렸지만 그냥 단순히 a^b의 일의 자리 수를 구하는 문제다. 다만 이때 0이 나오는 경우 10을 출력하기만 하면 된다.


코드

처음엔 a,b를 입력받고 (a**b)%10에 0이 나올 때의 조건만 추가하면 된다고 생각했다. 근데 제곱수다보니 숫자가 커지면 시간이 굉장히 오래 걸렸다.
그래서 이 문제는 일의 자리를 어떻게 단순하게 구할지 생각하는 문제로 바뀌었다.


그래서 작성한 코드는 다음과 같다.

numList = [[10,10,10,10],[1,1,1,1],[6,2,4,8],[1,3,9,7],[6,4,6,4],
           [5,5,5,5],[6,6,6,6],[1,7,9,3],[6,8,4,2],[1,9,1,9]]
t = int(input())
for i in range(t):
    a,b = map(int,input().split())
    a = a%10
    print(numList[a][b%4])

numList는 10,1,2, ... , 9를 거듭제곱했을 때 나오는 일의 자리 수를 적어주었다. index에러를 피하기 위해 모두 4개씩 적었고 이렇게 하면 numList[a]는 a의 거듭제곱 일의 자리수가 반복되는 리스트를 가져온다. 여기서 numList[a][b%4]를 추가해주면 간단하게 구할 수 있었다.


근데 numList를 일일이 다 적어주는 과정이 번거로웠다. 다른 방법이 없을까 생각을 하다가 굳이 위의 코드처럼 복잡하게 생각할 필요가 없음을 깨달았다..
이후 작성한 코드는 다음과 같다.

t = int(input())
for i in range(t):
    a,b = map(int,input().split())
    a = (a%10 if a%10 else 10)
    b = (b%4 if b%4 else 4)
    print(a**b%10 if a**b%10 else 10)

길이는 크게 차이가 없지만 numList를 작성하지 않아도 된다는 편리함이 생겼다! 그리고 비슷한 로직이지만 실제 구현 시간도 4ms 짧아졌다.


리뷰

  • 처음 문제 해석까지만 했을 때는 너무 쉽다고 생각했는데 너무 단순하게 생각했었고 시간도 생각보다 오래 걸렸다.
  • 수학적인 부분이라 재미는 있었다.
profile
//TODO Ready To BackEnd

0개의 댓글