목록알고리즘/백준 (257)
홍우진의 개발 일기장
문제 링크https://www.acmicpc.net/problem/1337 풀이 코드n = int(input())li = [int(input()) for i in range(n)]cnt_li = []for i in range(n): cnt = 4 for j in li: if li[i] 코드 해석투 포인터 알고리즘을 활용하였다.리스트 속 수를 돌며수와 수+5 사이의 숫자가 리스트 내에 있다면cnt -1 을 하여 연속 수를 만드는데 필요한 숫자의 수를 줄여나갔다. 체감 난이도: ★★☆☆☆
문제 링크https://www.acmicpc.net/problem/2018풀이 코드n = int(input())cnt, tot, start, end = 0, 0, 0, 0while end n: start += 1 tot -= start else: cnt += 1 end += 1 tot += endprint(cnt)코드 해석투 포인터 알고리즘을 활용하였다. 체감 난이도: ★☆☆☆☆
문제 링크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)코드 해석나무를 심는 시간, 나무가 자라는 시간, 몇번째 나무인지를 모두 더하여 계산한다. 체감 난이도: ★☆☆☆☆