-
20302. 민트초코Algorithm/Baekjoon 2023. 2. 14. 00:14
모두 소인수분해 해준 뒤 각 소인수마다의 지수를 변화시킨다고 생각하면 된다.
곱하기를 만나면 지수가 +1이 되고, 나누기를 만나면 지수가 -1이 된다.
유리수가 되려면 지수가 음수인 소인수가 존재하면 된다.
그래서 소인수 분해를 어떻게 하냐면 -> 에라토스테네스의 체 개념을 이용하면 된다.
import sys input = sys.stdin.readline def primelist() : primes = [i for i in range(10**6+1)] for i in range(2, (10**3)+1) : if primes[i] != i : continue for j in range(i*i, 10**6+1, i) : if primes[j] != j : continue primes[j] = i return primes def calc_exp(exponents, n, flag, primes) : while n > 1 : exponents[primes[n]] += flag n//=primes[n] return exponents def deter_mint(arr) : flag = 0 exponents = [0 for _ in range(10**6+1)] primes = primelist() for i in range(len(arr)) : if i%2 == 0 : continue num = abs(int(arr[i])) if arr[i-1] == '*' : flag = 1 if int(num) == 0 : return "mint chocolate" elif arr[i-1] == '/' : flag = -1 exponents = calc_exp(exponents, num, flag, primes) for i in exponents : if i < 0 : return "toothpaste" return "mint chocolate" n = int(input()) arr = input().rstrip().split() print(deter_mint(['*'] + arr))
나름 깔끔하게 짜보겠다고 짰는데 실제로 깔끔한지는 잘 모르겠다...
'Algorithm > Baekjoon' 카테고리의 다른 글
11723. 집합 (0) 2023.02.27 1018. 체스판 다시 칠하기 (0) 2023.02.20 2436. 공약수 (0) 2023.02.11 16563. 어려운 소인수분해 (0) 2023.02.10 2960. 에라토스테네스의 체 (0) 2023.02.09