본문 바로가기

분류 전체보기110

AWS amplify로 GraphQL 추가하기 AWS amplify로 어플리케이션 배포하기 에서 기본적인 next 셋업을 하고, amplify로 graphQL api를 추가해보자. amplify add api amplify/backend/backend-config.json에 "api"가 추가되고 amplify/backend/api 폴더와 파일들이 자동으로 생성된다. 기본으로 제공되는 스키마는 다음과 같다. type Todo @model { id: ID! name: String! description: String } GraphQL에서 사용할 모델의 스키마로 @model로 정의한 SDL(Schema Definition Language)을 GraqhQL Transform 해준다. 뒷단에서는 DynamoDB와 AppSync가 만들어져 실행된다. 나중에 c.. 2020. 12. 10.
AWS amplify로 어플리케이션 배포하기 npx create-next-app으로 가장 기본적인 next 환경을 갖추고 amplify를 사용해서 배포까지 해보자. Next.js에서 공식적으로 운영하는 github.com/vercel/next.js/tree/canary/examples에서 기본 골격을 받아서 시작할 수도 있다. 여기서는 배포하는 환경까지 만들어 보고 다음에는 auth, api, function 등 backend까지 amplify로 다뤄 볼 예정이다. npm install -g @aws-amplify/cli로 amplify cli를 먼저 설치한다. amplify init amplify init으로 amplify 설정을 초기화한다. 위와 같은 파일들이 생성되며 amplify console에서도 방금 생성한 app을 볼 수 있다. 초기화.. 2020. 11. 29.
leetcode 1563 - Stone Game V https://leetcode.com/problems/stone-game-v/ 풀이 Alice가 임의의 크기로 left와 right를 나눠서 더 작은 쪽의 점수를 얻으면, 그 뒤로 더 작은 쪽에서 같은 게임이 반복된다. 따라서 모든 크기로 나눠보고 재귀적으로 게임을 진행시킬 수 있다. 이 게임은 마지막 하나가 남을 때까지 진행되며 그 상태에서 Alice는 0점을 얻는다. 모든 subgame은 stoneValue의 subarray에서 이루어지기 때문에 중복된 연산을 방지하기 위해 아래와 같이 d 배열을 정의한다. d[i][j] = stoneValue의 [i, j] 부분에서 게임할 때 Alice가 얻는 최대 점수 매 subgame에서 가능한 경우를 탐색할 때 미리 구해놓은 sum 배열을 활용하면 좀 더 효율.. 2020. 11. 25.
leetcode 1510 - Stone Game IV https://leetcode.com/problems/stone-game-iv/ 풀이 Alice가 선택할 수 있는 모든 경우를 다 해봐서 이길 수 있는 경우가 하나라도 있으면 그 길을 선택하면 된다. 최소 한 개 이상을 가져가기 때문에 stone이 1개 있는 경우부터 차례대로 n까지 구해간다면 점화식을 세울 수 있다. 매 턴이 바뀔 때마다 Alice, Bob 유저가 바뀌므로 d 배열을 정의할 때 선공하는 사람이 최선을 다할 때 이길 수 있는지 여부를 저장해야 한다. d[i] = i개의 stone이 있을 때 선공하는 사람이 이길 수 있으면 true, 무조건 지면 false 이 전 상태를 참조할 때 턴이 바뀌기 때문에 d 배열에 false가 하나라도 있으면 그 길을 선택하는 것이 최선이다. 코드 class .. 2020. 11. 25.
leetcode 1406 - Stone Game III https://leetcode.com/problems/stone-game-iii/ 풀이 모두가 최선을 다하기 때문에 현재 상태에서 한 개 가져갔을 때, 두 개 가져갔을 때, 세 개 가져갔을 때를 비교해서 가장 좋은 선택을 할 것이다. 세 가지 경우를 재귀적으로 반복해서 마지막까지 진행한다. 이렇게 모든 stone을 가져가서 빈 배열까지 오면 승패를 알 수 있으므로 재귀의 기저 조건으로 둘 수 있다. 이를 활용해서 d 배열을 아래와 같이 정의하고 점화식을 세우면 된다. d[i] = stoneValue의 [i, n) 부분에서 선공했을 때 얻는 최대 이득 이렇게 정의한 후 뒤에서부터 0번째까지 d값을 구하면 현재 stoneValue에서 누가 이기는지 한 번에 알 수 있다. 코드 class Solution { .. 2020. 11. 24.
leetcode 1140 - Stone Game II https://leetcode.com/problems/stone-game-ii/ 풀이 처음에 M = 1 인 상태에서, 1 = n) return 0; if(d[index][m] != -1) return d[index][m]; int ans = 0; for(int i = index; i < min(n, index + 2*m); i++) { ans = max(ans, sum[index] - dfs(i+1, max(m, i-index+1))); } return d[index][m] = ans; } }; 2020. 11. 23.