본문 바로가기

전체 글

(214)
Cypress에서 브라우저의 권한을 다루는 방법 E2E테스트를 진행하는 도중에 위와 같이 browser의 권한 요청을 묻는 경우가 있어서 E2E테스트가 멈추는 상황이 발생하였습니다. 해결 방법은 다음과 같습니다. yarn add cypress-browser-permissions -D그리고 cypress/plugins/index.js에 아래와 같이 코드를 넣어줍니다. const { cypressBrowserPermissionsPlugin } = require('cypress-browser-permissions') /** * @type {Cypress.PluginConfig} */ module.exports = (on, config) => { // `on` is used to hook into various events Cypress emi..
1914. 하노이 탑 옛날에 하노이 탑을 직접 해봐서 규칙이 있다는 것을 알았다. 하지만 코드로 구현하는데 어려움을 겪었다. 재귀 호출을 통해 구현할 수 있는데 재귀함수 하나를 정의해야한다. f(n,a,b,c) → n개의 원판이 a기둥에 있을 때, c기둥으로 모두 이동 시키는 함수 n-1개의 원판을 2번기둥으로 옮김 1번 기둥에 남아있는 한개의 원판을 3번으로 2번기둥에 있는 n-1개의 원판을 3번 기둥으로 def f(n, a, b, c): if(n == 1): print(a, c, sep = " ") else: f(n-1, a, c, b) f(1, a, b, c) f(n-1, b, a, c) n = int(input()) print(2**n-1) if(n
Next.js PWA 찍먹 최근에 pwa를 주제로 프로젝트를 하게 되었는데 pwa에 대해서 알아보기도 하고 next-pwa도 한번 써보고 싶어서 찍먹을 해보기로 하였다. 우선 create-next-app 을 이용해서 next-app을 만든다. npx create-next-app next-pwa 이후에 next-pwa를 설치해준다. yarn add next-pwa 이후에 512x512 그리고 192x192아이콘을 public 디렉토리에 넣어준다. 다음은 manifest파일을 public 디렉토리에 작성해 주는 것이다. 크롬 확장 프로그램을 만들 때도 이 파일을 작성했었는데, PWA에서 마찬가지이다. { "name": "Next PWA demo", "short_name": "Next PWA", "icons": [ { "src": "/..
10819. 차이를 최대로 풀이 방법은 크게 2가지로 생각해 볼 수 있을 것 같다. 첫번째는 파이썬의 permutations를 이용. 두번째는 dfs 가장 직관 적인 풀이는 다음과 같다. import sys from itertools import permutations input = sys.stdin.readline n = int(input()) a = list(map(int, input().split())) cases = list(permutations(a)) answer = 0 for case in cases: mid_sum = 0 for i in range(n - 1): mid_sum += abs(case[i] - case[i + 1]) answer = max(mid_sum, answer) print(answer) 다음으로 ..
방슐랭가이드에 핸드폰 인증 구현하기 방슐랭 가이드 정식 버전을 개발하면서 핸드폰 인증 부분을 개발하게되었다. 우선 검색을 통해서 네이버 SENS( Simple & Easy Notification Service)라는 API를 활용하기로 결정했다. SENS에서 프로젝트를 하나 만들어 준다. 나는 bclguide라는 이름의 프로젝트를 만들었다. 프로젝트를 만든 후 발신 번호를 등록해야한다. 본인 소유의 핸드폰을 증명하기 위해 서류가 필요하다. kt를 이용한다면 케이티 엠모바일에서 발급 받을 수 있다. 위 서류를 제출하면 1~2일 기다려야한다. 기다리면 네이버에서 위와 같이 서류 인증을 해준다. 방슐랭가이드의 경우에는 하루 걸렸다. 네이버 SENS( Simple & Easy Notification Service)의 정말 좋은 점은 정말 쉬운 사용..
22. Generate Parentheses 모든 쌍을 다 찾아야 하므로, dfs를 진행했다. 여는괄호, 닫는 괄호가 둘다 0이 되었을 때, 배열에 푸쉬를 해주었고, 오른쪽 괄호의 개수가 더 작다면 무조건 리턴조건, 왼쪽 괄호의 개수가 0보다 작다면 무조건 리턴 조건에 포함된다. 따라서 풀이는 아래와 같다. const generateParenthesis = function(n) { let res = []; const dfs = (str, left, right) => { if(left === 0 && right === 0) { res.push(str); return; } if(right < left || left < 0) return dfs(str+"(", left - 1, right) dfs(str+")", left, right - 1) } dfs..
33. Search in Rotated Sorted Array 문제에서 O(logn)으로 풀어야 한다고 명시가 되어있다. 이 문제에서 중요한 부분은 두 배열로 나눴을 때 둘중 하나는 무조건 정렬된 상태라는 것이다. 그렇게 생각하면 왼쪽이 정렬되어있다면, 오른쪽은 정렬되지 않았을 것이고, 반대의 경우도 마찬가지이다. 왼쪽이 정렬된 상태일 경우에, 타겟이 그 정렬된 숫자들 사이에 있는 값이라면, right을 mid - 1 로 바꿔주고, 만약 타겟이 그 숫자들 사이에 있지 않다면, 그 left를 mid+1로 바꿔주면서 탐색한다. const search = function(nums, target) { let left = 0; let right = nums.length - 1; while (left
289. Game of Life 각 칸에 이웃하는 주민의 수를 구해야하고, 그 주민수를 저장해놓고 비교할 때 사용해야한다. 따라서 객체에 저장을 해놓고 사용했다. 이웃하는 주민이 2보다 작거나, 3보다 크다면, 그 칸을 0으로 바꿔준다. 만약 3이라면 1로 바꿔준다. const gameOfLife = function(board) { const hash = {}; const directions = [[-1,-1], [-1,0], [-1,1], [0,-1], [0,1], [1,-1], [1,0], [1,1]]; for (let r = 0; r < board.length; r++) { for (let c = 0; c < board[r].length; c++) { let numLiveNeighbors = 0; for (let [x, y] of..