import sysclass Dequeue: def __init__(self): self.items = [] def push_front(self, item): self.items.insert(0, item) def push_back(self, item): self.items.append(item) def pop_front(self): if len(self.items) == 0: return -1 else: tmp = self.items.pop(0) return tmp def pop_back(self): if len(self.items) == 0: return -1 else: tmp = self.items.pop()..
Algorithm
n = int(input())arr = []for i in range(n): name, a, b, c = input().split() name = str(name) a, b, c = [int(x) for x in [a, b, c]] arr.append([name, a, b, c])arr.sort(key=lambda x: (-x[1], x[2], -x[3], x[0]))for i in arr: print(i[0])list.sort(key= lambda x:(x[1],-x[0]))와 같이 정렬하면 이차원 리스트에서 [1]인덱스에 대해 오름차순 정렬한 뒤, 그 상태에서 [0]인덱스에 대해 내림차순 정렬한다. a,b,c = [int(x) for x in [a,b,c]]를 통해 한줄로 a,b,c를 동시에..
n = int(input())arr = list(map(int, input().split()))dp = [1] * nfor i in range(1, n): for j in range(0, i): if arr[j] 0 이런식으로 n-1번 반복하면 주어진 배열에 대해 가장 긴 증가하는 부분 수열을 구할 수 있다.4 2 5 8 4 11 15에서 4 5 8 11 15를 구할 수 있는데,5는 2가 5보다 작으니 dp[1]+1과 기존 dp[2]인 1을 비교하여 더 큰 수인 2가 dp[2]에 갱신됨.8은 5가 8보다 작으니 dp[2]+1과 기존 dp[3]인 1을 비교하여 더 큰 수인 3이 dp[3]에 갱신됨.4는 2가 4보다 작으니 dp[1]+1과 기존 dp[4]인 1을 비교하여 더 큰 수인 2가 dp[..
n, m = map(int, input().split())arr = []dp = [[0] * m for i in range(n)]#arr 초기화arr = []for i in range(n): arr.append(list(map(int, input().split())))for i in range(n): dp[i][0] = arr[i][0]for j in range(1, m): for i in range(n): if (i == 0): dp[i][j] = max(dp[i + 1][j - 1], dp[i][j - 1]) + arr[i][j] elif (i == n - 1): dp[i][j] = max(dp[i - 1][j - 1], dp[i][j - 1]) + arr[i][j]..
import sysput = sys.stdin.readline()n, m = map(int, put.split())arr = [0] * nfor i in range(n): arr[i] = int(input())arr.sort(reverse=True)cnt = 0remain = mfor i in range(n): if arr[i] 위의 방식은 그리드 방식이 가미된 방식이고import sysput = sys.stdin.readline()n, m = map(int, put.split())arr = [0] * nfor i in range(n): arr[i] = int(input())arr.sort(reverse=True)dp = [10001] * (m + 1)dp[0] = 0for i in range(n..