일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- C#
- w3school
- Material
- Unity
- Tutorial
- dynamic
- guide
- loop
- dfs
- github
- Class
- 프로그래밍
- c++
- 기초
- parameter
- 시작해요 언리얼 2022
- Programming
- W3Schools
- Unreal Engine 5
- python
- String
- Algorithm
- 백준
- Basic
- 오류
- UE5
- DP
- 파이썬
- 재귀
- 문제풀이
- Today
- Total
목록Algorithm (107)
행복한 개구리

n = int(input()) mp = [list(map(int, input().split())) for i in range(n)] mp.sort(key=lambda x: (x[1], x[0])) end = 0 cnt = 0 for i in range(n): if mp[i][0] >= end: cnt += 1 end = mp[i][1] print(cnt) 처음 회의를 시작하는 팀은 가장 빨리 끝나는 팀으로 지정해주어야 합니다. 이를 위해서 정렬을 해주어야하는데, 정렬을 두번 하는 이유는 종료시간으로만 정렬을 했을 때, 시작시간은 오름차순이 아닌 입력받은 순서대로 정렬되기 때문입니다. 그 이후로는 다른 팀들의 시작시간이 이전팀의 회의 종료시간과 같거나 더 늦어야합니다. 이를 통해 회의 종료시간을 갱신하며 ..

더보기 n, k = map(int, input().split()) coins = [] for i in range(n): coins.append(int(input())) cnt = 0 while k != 0: for i in range(n-1, -1, -1): if coins[i]

n, k = map(int, input().split()) obj = [[0, 0]] dp = [[0]*(k+1) for _ in range(n+1)] for i in range(n): obj.append(list(map(int, input().split()))) for i in range(1, n+1): for j in range(1, k+1): wei = obj[i][0] val = obj[i][1] if j < wei: dp[i][j] = dp[i-1][j] else: dp[i][j] = max(dp[i-1][j], dp[i-1][j-wei]+val) print(dp[n][k]) dp는 위 사진과 같은 결과를 갖습니다. 우선 물건들을 저장할 리스트에 0무게의 0가치를 갖는(비어잇는) 요소를 하나 만..

↓ 틀린 코드 더보기 n = int(input()) arr = list(map(int, input().split())) result = -1001 sum = 0 for i in range(n): for j in range(n-i): for k in range(j, j+i+1): sum += arr[k] if sum > result: result = sum sum = 0 print(result) 수열의 합들을 모두 비교하여 그 중 최댓값을 출력하는 방식입니다. 시간초과가 나왔습니다. n = int(input()) arr = list(map(int, input().split())) sum = [arr[0]] for i in range(len(arr)-1): sum.append(max(sum[i] + arr[..

stringA = input().strip().upper() stringB = input().strip().upper() dp = [[0] * (len(stringB)+1) for i in range(len(stringA)+1)] for i in range(1, len(stringA)+1): for j in range(1, len(stringB)+1): if stringB[j-1] == stringA[i-1]: dp[i][j] = dp[i-1][j-1]+1 else: dp[i][j] = max(dp[i-1][j], dp[i][j-1]) print(dp[-1][-1]) 문자열 A와 B가 주어졌을 때, A와 B의 문자들을 일일히 비교하며 문자열의 최대 길이를 dp에 캐싱해줍니다. 따라서 dp는 stringB..

n = int(input()) wire = [] dp = [1] * n for i in range(n): wire.append(list(map(int, input().split()))) wire.sort(key=lambda x: x[0]) for i in range(n): for j in range(i): if wire[j][1] < wire[i][1]: dp[i] = max(dp[i], dp[j] + 1) print(n - max(dp)) 우선 입력받을 때 전봇대의 순서가 정렬되어 입력되는 것이 아니라는 점에 유의해야 합니다. 따라서 정렬을 해야한다는 생각을 가지고 작성했습니다. 전봇대의 개수에 맞게 wire리스트에 추가해주었습니다. wire리스트의 각 요소는 list형식으로 이루어져 있으며 이 것의 ..