프로그래밍/python

[python] 백준 1009 분산처리

pxatd 2022. 1. 11. 12:32
728x90

문제

재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.
1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,
10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...
총 데이터의 개수는 항상 a^b개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.


학습

처음에 문제를 우습게 보고 이런식으로 라이브러리를 이용하여 코드를 작성하면 해결할 수 있을것이라 생각했다. 그러나 7,100 9,635 는 꽤 큰 숫자였고 어김없이 OverflowError math range error 에러가 발생했다.

다시 머리를 굴리기 시작했다.

이 사진을 보고 각각 케이스를 나누어 다시 코딩해보았다. 나는 반복되는 수의 개수를 기준으로 잡고 156/2378/49/10 로 나누었다.

import math 
num=int(input()) 
for i in range(num): 
	a,b=map(int,input().split()) 
	if a==1 or a==5 or a==6: 
		print(a) 
	elif a==2 or a==3 or a==7 or a==8: 
		print((a**(b%4))%10) 
	elif a==4 or a==9: 
		print((a**(b%2))%10) 
	else: 
		print('10')

음.. 브론즈 3 문제인데.. 꽤나 자존심이 상했다. 분명 예시를 넣어봤을 땐 틀린 부분이 없다고 생각했는데 반례가 뭐지? 싶어 커뮤니티에 질문들들을 살펴보았다. 결론은 내가 문제에서 조건을 놓친 거였다. a가 최대 10까지만 입력가능한 줄 알았는데 100보다 작은수가 입력가능하다고 적혀있었다. 내 코드에서는 10까지만 다루었으니 틀렸습니다 가 나오는게 당연하다.

피드백을 반영하여 다시 코드를 수정해보았다. 다음과 같다.

num=int(input()) 
for i in range(num): 
    a,b=map(int,input().split()) 
    a=a%10 
    if a==1 or a==5 or a==6: 
	    print(a) 
	elif a==2 or a==3 or a==7 or a==8: 
		print((a**(b%4))%10) 
	elif a==4 or a==9: 
		print((a**(b%2))%10) 
	else: 
		print('10')

여전히 틀렸다고 나와 커뮤니티에 반례를 부탁드렸더니 2 4 라는 답이 달렸다.
나머지 %4와 %2 를 구하는 과정에서 4와 2가 포함된 값은 0으로 처리되어 실제 답은 6임에도 불구하고 1이 출력되는 것이었다. 따라서 다시 수정하였고 그 코드는 다음과 같다.


코드

num=int(input()) 
for i in range(num): 
    a,b=map(int,input().split()) 
    a=a%10 
    if a==1 or a==5 or a==6: 
    	print(a) 
    elif a==2 or a==3 or a==7 or a==8: 
        if b%4==0: 
        print(a**4%10) 
    else: 
        print((a**(b%4))%10) 
    elif a==4 or a==9: 
        if b%2==0: 
        print(a**2%10) 
        else: 
        print((a**(b%2))%10) 
    else: 
    print('10')

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

 

1009번: 분산처리

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

www.acmicpc.net

 

728x90