목록Python (288)
홍우진의 개발새발
문제 링크https://www.acmicpc.net/problem/11659 풀이 코드import sysinput = sys.stdin.readlinen, m = map(int, input().split())su = list(map(int, input().split()))pre = [0]tot = 0for i in range(n): tot += su[i] pre.append(tot)for i in range(m): i, j = map(int, input().split()) print(pre[j] - pre[i-1])코드 해석누적합 기법을 사용하였다. 체감 난이도: ★★★☆☆
문제 링크https://www.acmicpc.net/problem/2559풀이 코드n, k = map(int,input().split())ondo = list(map(int, input().split()))dap = []dap.append(sum(ondo[:k]))for i in range(n - k): dap.append(dap[i] - ondo[i] + ondo[k+i])print(max(dap))코드 해석평범한 방법으로 풀이하니까 시간 제한이 걸렸다. 체감 난이도: ★★☆☆☆
문제 링크https://www.acmicpc.net/problem/1002 풀이 코드 import matht = int(input())for _ in range(t): x1, y1, r1, x2, y2, r2 = list(map(int, input().split())) btw = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) if btw == 0 and r1 == r2: # 두 원의 크기가 같아 겹치는 경우 print(-1) elif r1 + r2 == btw or abs(r2 - r1) == btw: # 내접 혹은 외접일 때 print(1) elif (abs(r1 - r2) 코드 해석두 좌표 사의의 거리를 ..
문제 링크https://www.acmicpc.net/problem/15652풀이 코드 n,m = map(int, input().split())dap = [] def dfs(start): if len(dap) == m: print(*dap) return for i in range(start, n+1): #받은 수보다 큰 수부터 시작 dap.append(i) dfs(i) # 반복 dap.pop() #원상복구 dfs(1)코드 해석DFS를 사용하여 풀이하였다. 체감 난이도: ★★★☆☆
문제 링크https://www.acmicpc.net/problem/4948 풀이 코드 num = 123456 * 2 + 1tot = [1] * numfor i in range(1, num): # 미리 소수 판단 if i == 1: continue for j in range(2, int(i**0.5)+1): # 2부터 i의 제곱근까지의 수로 나눠지는지 if i % j == 0: tot[i] = 0 breakwhile 1: dap = 0 n = int(input()) if n == 0: break for i in range(n+1, 2*n+1): # n부터 2n까지 dap += t..
문제 링크https://www.acmicpc.net/problem/9237풀이 코드n = int(input())day = list(map(int, input().split()))day.sort(reverse=True)cho = []for i in range(n): cho.append(day[i] + 1 + i)print(max(cho) + 1)코드 해석나무를 심는 시간, 나무가 자라는 시간, 몇번째 나무인지를 모두 더하여 계산한다. 체감 난이도: ★☆☆☆☆
문제 링크https://www.acmicpc.net/problem/1874 풀이 코드cnt = 1result = Truestack = []dap = []n = int(input())for i in range(n): num = int(input()) while cnt 코드 해석복잡한 난이도였다.핵심은 cnt다. cnt가 stack을 쌓아주고 만들때마다 +를 답에 집어넣고, cnt + 1 을 해준다.stack을 쌓다가 만약 stack에 들어간 수가 사용자가 넣은 수(num)랑 똑같다면 stack의 제일 끝 수를 빼고 답에 -를 집어넣는다.만약 동일하지 않다면 수열 생성이 불가능하다는 뜻이다. 따라서 NO를 출력하고 끝낸다.
문제 링크 https://www.acmicpc.net/problem/9506풀이 코드while 1: n = int(input()) if n == -1: break; arr = [] for i in range(1, n): if n % i == 0: arr.append(i) if sum(arr) == n: print(n, " = ", " + ".join(str(i) for i in arr), sep="") else: print(n, "is NOT perfect.")코드 해석브루트포스를 이용하여 약수를 모두 구한 뒤약수의 합이 n과 같다면 출력아니라면 is N..