from collections import dequeans = 0n, k, m = map(int, input().split())mat = []visited = [[False for _ in range(n)] for _ in range(n)]for _ in range(n): mat.append([int(x) for x in input().split()])s_pos = []for _ in range(k): r, c = map(int, input().split()) s_pos.append((r - 1, c - 1))stone_pos = [(i, j) for i in range(n) for j in range(n) if mat[i][j] == 1]selected_stones = []q = deq..
전체 글
개발하며 겪은 것들을 공유합니다.![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSXvMK%2FbtsJdSrRx4e%2FwW8ErXy2ANfB6RIE52hq71%2Fimg.png)
간단하게 AWS를 이용해서 정적 배포를 해봅시다.도메인 구매 후 Route53에 등록하고, HTTPS를 위한 증명서 발급은 미리 되어있다고 가정합니다.1. S3원하는 이름으로 버킷을 생성합니다. 유저들에게 서빙할 html 파일을 저장하는 용도로 사용할 것이기 때문에 버킷에 대한 퍼블릭 액세스를 개방합니다. 나머지 설정은 기본 설정을 따르셔도 좋고, 필요한 부분들을 설정해주시면 됩니다.버킷을 생성했으면 해당 버킷의 속성 탭으로 접근해서 맨 아래의 정적 웹 호스팅을 활성화합니다. 맨 밑의 리다렉션 규칙은 비워둡니다. 이제 권한 탭으로 이동하여 버킷 정책과 CORS 정책을 설정합니다.정책 생성기를 사용할 경우 위 사진과 같이 설정하고, Actions는 GetObject, ARN은 버킷 ARN을 입력합니다.생성..
import syssys.setrecursionlimit(2500) # 재귀 깊이 설정n, m = map(int, input().split())highest = 0mat = []ans = [1, 0]visited = []for _ in range(n): buf = [int(x) for x in input().split()] highest = max(highest, max(buf)) mat.append(buf)def search(row, col, k): global visited if ( row n - 1 or col > m - 1 or visited[row][col] == True or mat[row][col] ans[1]..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzzPx0%2FbtsI4puQyns%2FkwHvsp2sCjiQRve8tkqpIk%2Fimg.png)
프론트엔드 서버를 사용하던 환경에서 팀 내부적으로 굳이 프론트 서버 기능이 없다고 판단해 정적 배포로 전환하였습니다.이전까지의 CI/CD 플로우는 젠킨스를 활용해 특정 액션에 훅을 걸어 자동 배포되는 구조였습니다. 이전에 쓰던 젠킨스 프론트엔드 파이프라인을 다시 설정해서 써야하는 상황이었는데..프론트엔드 깃허브 레포를 정리하는 김에 깃허브 액션을 써볼까 해서 시도를 해봤습니다.깃허브 내부에서 해결할 수 있다면 젠킨스 비용을 절약할 수도 있겠다~ 했구요.S3, CloudFront등 AWS 기본 셋업이 되어 있다고 가정합니다.1. 깃허브 액션용 IAM 계정 설정원하는 이름으로 새 IAM 사용자를 생성합니다.생성이 완료된 IAM 계정의 액세스 키를 발급받아 저장해놓습니다. (발급했을 때만 보여주니 잘 저장해놓..
# Prev code: 사다리타기 구현을 너무 복잡하게 생각했음.# def run_ladder(lines):# res = [0 for x in range(n)]# for i in range(1, n + 1):# x, y = i, 0# while y 1 or lines[start][1] 사다리 타기 문제를 푸는 것에 실패했습니다.처음 접근할 때 기본적으로 전체적인 솔루션을 구상하긴 했으나, 사다리 타기 시뮬레이션을 깔끔히 구현하는 것에 성공하지 못했습니다.이전 코드와 비교하여 해설의 코드를 적용한 솔루션을 기록합니다.사다리 타기 로직과 아직 머릿속에서 불완전했던 조합 전개 부분을 학습했습니다.
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeGxm6j%2FbtsIPKUiopp%2FO4qMXh3koWxWad55nOqMGk%2Fimg.gif)
개발 중 ref 객체를 자식 컴포넌트에 전달하는 과정에서 에러를 겪었습니다.이왕 정리할 거 ref에 대하여 한번에 다 정리하자 싶어서 작성합니다.ref란?크게 2가지 용도로 ref를 사용할 수 있습니다.컴포넌트가 일부 정보를 기억하고 싶게 하고싶지만 리렌더링을 유발하게 하고 싶지 않을 때DOM 요소에 직접 접근하고 싶을 때이번 포스트에서는 2번 용도에 대한 내용입니다. 1번에 대해서는 기회가 되면 다뤄보겠습니다.Ref로 DOM 조작하기보통 React로 개발을 할 때 DOM을 직접 조작할 일은 많지 않습니다. (React가 자동으로 해주니까요!)하지만 가끔 직접적인 DOM 접근이 필요합니다. 이번 같은 경우는 특정 노드에 포커스를 옮기는 경우입니다.예시 코드를 통해 보겠습니다.import { useRef ..
13 - 스코프13.3 스코프 체인스코프가 계층적으로 연결된 것을 스코프 체인이라 한다.변수를 참조할 때 JS 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프로 이동하며 선언된 변수를 검색한다.스코프 체인은 물리적 형태로 존재한다.JS 엔진은 코드 실행에 앞서 위 그림과 유사한 자료구조인 렉시컬 환경을 실제 생성한다.13.5 렉시컬 스코프var x = 1;function foo() { var x = 10; bar();}function bar() { console.log(x);}foo();bar();두 가지 패턴을 예측한다.함수를 어디서 호출했는지에 따라 함수의 상위 스코프를 결정 - 동적 스코프함수를 어디서 정의했는지에 따라 함수의 상위 스코프를 결정 - 정적 스코..
08 - 조건문8.2 조건문If 문의 조건식이 불리언 값이 아니면 암묵적으로 불리언 값으로 강제 변환된다는 것을 알게 되었다. Switch문에 대해서 논의하고 싶었던 것이 있음.!Switch 문을 적용하지 않았을 때 - 20줄Switch 문을 적용한 사례 - 30줄 8.3 반복문for (;;) { ... } 로 for 문 무한루프가 가능하다는 것을 알게됨. 잘 쓸 것 같지는 않다..While True가 무한루프 표현에 더 직관적이지 않을까 싶다.8.4 break 문레이블 문에 대해 알게 되었다.outer: for (var i = 0; i GOTO 문의 역할을 한다! 하지만 남용할 경우 GOTO 문의 단점처럼 코드가 난잡해진다는 단점이 존재한다.09 - 타입 변환과 단축 평가9.2 암묵적 타입 변환표현..