목록백준 문제 풀이 (154)
황소개발자
import sys input = sys.stdin.readline n = int(input()) lst = list(map(int, input().split())) def next_permutation(lst): if len(lst) == 1: return [-1] for i in range(len(lst) - 1, 0, -1): if lst[i] > lst[i - 1]: break if i == 1 and lst[0] > lst[1]: return [-1] # i - 1 인덱스하고 i ~ len(lst) - 1 인덱스에서 # i-1 인덱스값보다 크면서 제일 작은거랑 바꿔야함 # 끝에는 내림차순이기에 끝에서부터 비교 ㄱㄱ for j in range(len(lst) - 1, -1, -1): if lst[..
import sys input = sys.stdin.readline def go(sum, n): if sum == n: return 1 if sum > n: return 0 return go(sum + 1, n) + go(sum + 2, n) + go(sum + 3, n) t = int(input()) for i in range(t): n = int(input()) print(go(0, n)) 재귀를 써서 풀었습니다. 1. 목표하는 값에 도달했으면 경우의 수 1 증가 2. 목표하는 값을 초과하면 버리기 3. 목표하는 값을 향해 달려가는데, 1을 증가하거나 2를 증가시키거나 3을 증가시키거나 쉽죠?
난 이 문제 심각하게 고민했다 주어진 e, s, m 을보고 지금 년도를 추측하라니.. 주어진 esm에서 먼저 e만큼 각 자리에 대해 빼주고, 그 다음은 s만큼, 그 다음은 m만큼.. 뺄 때 세개다 0이되면 종료 아니라면 다시 15로 넘어가거나 28로 넘어가거나.. 나머지 연산에 대해 심오한 생각을 가지고있었다. 근데 가만히 보니 시간이 2초다 2억번의 계산을 할 수 있는 시간이다 매우 충분한 시간이지 마지막 예제를 보니 7580년인거 보니 최대 년도가 저거인거 같다. 저기서 1을 더하면 다시 1 1 1이 되니까 ㅋ 하튼 2초안에 다룰 수 있다는 걸 판단한 이후에는 브루트포스 답게 매우 간단하게 풀었다. 답은 아래 코드와 같다. import sys input = sys.stdin.readline E, S,..
(a + b) % c 는 (a % c + b % c) % c 와 같으며 곱셈연산에 있어서도 성립한다. 나누기 연산은 (a / b) % c 는 (a * b ^ (c - 2)) % c --- a와 b는 서로소, c는 소수 (페르마의 소정리) 와 같으며 빼기 연산은 (a - b) % c 는 (a % c - b % c + c) % c 와 같다 알고리즘문제에 있어 모듈(나머지) 연산은 오버플로우 방지에 필수다.
최적화! import sys input = sys.stdin.readline tall = [] for i in range(9): tall.append(int(input())) sub = sum(tall) - 100 flag = False for i in range(8): for j in range(i + 1, 9): a, b = tall[i], tall[j] if a + b == sub: tall.remove(a) tall.remove(b) flag = True break if flag: break tall.sort() for x in tall: print(x) 최적화하시고 또 하세요!
파이썬에는 삼항연산자가 없다. 대신 이게있다. is_big = True if 5 > 3 else False 위 코딩은 아래 코딩과 같은거지 is_big = 5 > 3 ? True : False 다만 삼항연산자는 파이썬에서 못쓸뿐 문장에 if else를 자연스럽게 쓸 수 있따.
에레토스테네스의 체 구현해도 시간초과나서 최적화하는데 꽤 걸렷네요 import sys input = sys.stdin.readline num_list = [] while True: n = int(input().strip()) if n == 0: break num_list.append(n) max_num = max(num_list) sosu = [1 for i in range(max_num + 1)] sosu[1] = 0 only_sosu = [] i = 2 while i