Home 백준 1009 분산처리
Post
Cancel

백준 1009 분산처리

백준 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
This post is licensed under CC BY 4.0 by the author.

멋쟁이 사자처럼 AI Shcool 2주차

기초 SQL 정리

Comments powered by Disqus.