백준 1009 분산처리
문제
재용이는 최신 컴퓨터 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)
출력
각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.
예시
- 입력
1 2 3 4 5 6
5 1 6 3 7 6 2 7 100 9 635
- 출력
1 2 3 4 5
1 7 6 1 9
분석
문제를 맨처음에 봤을땐, 이해가 잘되지 않았다.
마지막 데이터가 처리될 컴퓨터의 번호인걸 보면, 전체 데이터수를 구해서 마지막 데이터가 처리되는 번호를 구하면된다.
맨처음에 작성한 코드는 시간 초과가 발생했다.
1
2
3
4
5
6
7
8
9
data =[]
n = int(input())
for _ in range(n):
a, b = map(int, input().split())
data.append(pow(a,b))
for _ in range(n):
print(data[_]%10)
1
2
3
4
5
1
7
6
1
9
시간 초과가 발생하는 이유가 a^b 형태의 계산때문인거 같아서, 그냥 1의 자리만 구하면 될꺼 같았다.
a^b는 결국 a의 배수가 4주기 단위로 반복된다는 사실을 이용했다.
처음에는 패턴을 리스트 하나에 저장해서 인덱스로 접근해 출력하는 방식을 사용했는데 이것도 틀렸다해서, 4주기 패턴 별로 숫자를 나누어 산출하는 방식으로 코드를 짰는데 저것도 틀렸다고 한다..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data =[]
n = int(input())
for _ in range(n):
a, b = map(int, input().split())
if a%10 in [1, 5, 6]:
data.append(a%10)
elif a%10 in [4, 9]:
if b%2==0: data.append(a**2%10)
else: data.append(a)
else:
if b%4==0: data.append(a**4%10)
else: data.append(a**(b%4)%10)
for _ in data:
print(_)
1
2
3
4
5
1
7
6
1
9
결국엔 그냥 직관적으로 풀었다..
매번 백준을 풀때마다 느끼는건 약간 문제가 엄격하다?더럽다?인거 같다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
n = int(input())
for _ in range(n):
a,b = map(int, input().split())
base=a%10
if base == 0:
print(10)
elif base in [1,5,6]:
print(base)
elif base in [4,9]:
p=b%2
if p == 0: print(base*base%10)
else: print(base)
else:
p=b%4
if p ==0: print(base**4%10)
else: print(base**p%10)
1
2
3
4
5
1
7
6
1
9
Comments powered by Disqus.