[BOJ] 14888. 연산자 끼워넣기
문제 링크 문제N개의 수로 이루어진 수열 A1, A2, …, AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다. 1+2+3-4×5÷6 1÷2+3+4-5×6 1+2÷3×4-5+6 1÷2×3-4+5+6 식의 계산은 연산자 우선 순위를 무시하고 앞에서부터 진행해야 한다. 또, 나눗셈은 정수 나눗셈으로 몫만 취한다. 음수를 양수로 나눌 때는 C++14의 기준을 따른다. 즉, 양수로 바꾼 뒤...
[Node.js] EventLoop
Node.js 동작 방식Node.js를 창시한 라이언 달이 노드를 만든 이유로 꼽은 것은, 기존에 많이 사용되고 있는 WAS라고 불리는 Apache, Tomcat 같은 서버들은 오래걸리는 blocking 작업에서 원활한 사용에 문제가 생겨 동시성 프로그래밍을 위해 Node.js를 만들었다고 한다. Node를 사용하는 이유 중 가장 큰 특징을 뽑아보면, 처리 속도가 빠르다. 모든 동작이 비동기 기반이다. Event driven 이다. 이렇게 두가지가 있다.처리 속도가 빠른 이유는 Node의 동작 방식에서 찾아볼 수 있다. Node.js 는Event Loop 중심으로 동작한다. 구글에서 여러 구조 사진을 볼 수 있지만 대부분의 사진이 틀린 정보라고 한다. 이런 구조가 굉장히 보편적이었는데, 이 구조는 틀린 구조라고 한다. 이 구조가 더 Node.js 개발자가 밝힌 내용과 부합한 내용이라고 한다. Event Loop메인 스레드 겸 싱글 스레드로서 비즈니스 로직을 수행한다....
Promise
PromisePromise는 비동기 로직을 구현할 때 유용하게 사용되는 기능이다. ES6부터 도입된 기능으로 JS의 다양한 비동기 함수들을 쉽게 컨트롤 할 수 있게 되었는데, Node.js 등에서 Promise를 사용하지 않으면 callback 지옥에 빠지게 된다. 123456789101112131415doSomething(function (result) { doSomethingElse( result, function (newResult) { doThirdThing( newResult, function (finalResult) { console.log("Got the final result: " + finalResult); }, failureCallback ); }, failureCallback ...
Hoisting
HoistingHoisting이란 선언되기 전에 호출한 변수나 함수를 사용하더라도 JS 특성상 사용이 가능한 특징이다. 123a = "HEY";console.log(a);var a; 출력 1HEY 선언되기도 전에 사용한 변수가 정상적으로 불러와짐으로 인해서 개발자에게 혼란을 가져왔는데, 주로 var 키워드를 사용할 때 이러한 문제들이 발생했다. 이런 문제점들은 let을 사용하면 해결할 수 있다. let 키워드는 선언된 후에만 사용할 수 있기 때문에 사용하려고 하면 문법적 오류가 발생해 로직 오류를 방지할 수 있다. 123a = "HEY";console.log(a);let a; 출력 121.js:1 Uncaught ReferenceError: Cannot access 'a' before initialization at 1.js:1
Git 명령어 정리
Git 명령어git은 CLI 버젼과 GUI 버젼 두 개의 버젼이 있다. 자신에게 편한 것으로 사용하면 될것 같다. git init : git으로 버젼관리를 시작하는 명령어다. 명령어를 입력하면 프로젝트 폴더 내부에 .git 이라는 숨은 폴더가 생성된다. git add file : 버젼 관리에 추가될 파일들을 선택할 수 있다. file 이름을 작성해도 되고 폴더 내부의 모든 파일을 선택하고 싶다면 . 만 붙여줘도 된다. git commit -m "message" : 버젼관리 덩어리라고 생각하면 된다. 메세지를 입력해 어떤 부분을 작성한 코드인지 명시해주면 좋다. 예를 들어, 로그인 기능을 구현했다면 수정된 파일들을 add한 뒤에 commit 메세지로는 Add login feature 라고 작성할 수 있겠다. add . 로 모든 변경 사항을 추가하면 편리하긴 하지만 이후에 나, 혹은 다른 팀원이 어떤 기능을 구현하는데 어떤 코드가 수정되었는지 확인이...
[css] @media을 사용하는 반응형 웹
반응형 웹 페이지 css 속성에서 자주 보던 속성이다. 태블릿이나 휴대폰 등 다양한 크기의 디바이스에서 웹에 접속하는 트렌드에 맞게, 웹페이지 또한 어느 기기에서나 올바르게 출력될 수 있도록 설정해두는 것이 중요하다. @media다양한 미디어 유형이나 장치에 따라 서로 다른 스타일 규칙을 적용시킨다. 문법123@media 미디어타입 and (미디어 특성){ css 작성} 예시 12345@media screen and (max-width: 1200px) { body { color: red; }} media type 종류 all : 모든 미디어 타입에 적용 (default) screen : 컴퓨터 화면, 타블렛, 스마트폰 등 print : 인쇄전용 생략이 가능하다. media 특성 width : 뷰포트 가로 너비 max-width : 뷰포트 최대 가로 너비(이하) min-width : 뷰포트 최소 가로...
[BOJ] 14502. 연구소
연구소문제 링크 문제인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 입력첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. (3 ≤ N, M ≤ 8) 둘째 줄부터 N개의 줄에 지도의 모양이 주어진다. 0은 빈 칸, 1은 벽, 2는 바이러스가 있는 위치이다. 2의 개수는 2보다 크거나 같고, 10보다 작거나 같은 자연수이다. 빈 칸의 개수는 3개 이상이다. 출력첫째 줄에 얻을 수 있는 안전 영역의 최대...
[BOJ] 18428. 감시피하기
문제 링크 문제NxN 크기의 복도가 있다. 복도는 1x1 크기의 칸으로 나누어지며, 특정한 위치에는 선생님, 학생, 혹은 장애물이 위치할 수 있다. 현재 몇 명의 학생들은 수업시간에 몰래 복도로 빠져나왔는데, 복도로 빠져나온 학생들은 선생님의 감시에 들키지 않는 것이 목표이다. 각 선생님들은 자신의 위치에서 상, 하, 좌, 우 4가지 방향으로 감시를 진행한다. 단, 복도에 장애물이 위치한 경우, 선생님은 장애물 뒤편에 숨어 있는 학생들은 볼 수 없다. 또한 선생님은 상, 하, 좌, 우 4가지 방향에 대하여, 아무리 멀리 있더라도 장애물로 막히기 전까지의 학생들은 모두 볼 수 있다고 가정하자. 입력첫째 줄에 자연수 N이 주어진다. (3 ≤ N ≤ 6) 둘째 줄에 N개의 줄에 걸쳐서 복도의 정보가 주어진다. 각 행에서는 N개의 원소가 공백을 기준으로 구분되어 주어진다. 해당 위치에 학생이 있다면 S, 선생님이 있다면 T, 아무것도 존재하지 않는다면 X가 주어진다. 단, 전체...
[BOJ]18352. 특정 거리의 도시 찾기
문제 링크 문제어떤 나라에는 1번부터 N번까지의 도시와 M개의 단방향 도로가 존재한다. 모든 도로의 거리는 1이다. 이 때 특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 K인 모든 도시들의 번호를 출력하는 프로그램을 작성하시오. 또한 출발 도시 X에서 출발 도시 X로 가는 최단 거리는 항상 0이라고 가정한다. 예를 들어 N=4, K=2, X=1일 때 다음과 같이 그래프가 구성되어 있다고 가정하자. 이 때 1번 도시에서 출발하여 도달할 수 있는 도시 중에서, 최단 거리가 2인 도시는 4번 도시 뿐이다. 2번과 3번 도시의 경우, 최단 거리가 1이기 때문에 출력하지 않는다. 입력첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개의 자연수 A,...
AWS ubuntu18.04 FTP 설치하기
파일관리를 좀 더 편하게 하기위해 FTP를 설정했다. 인스턴스를 만들 때 마다 필요하기 때문에 설정방법을 알아두면 편하다. vsftpd 설치vsftpd는 ubuntu의 기본 ftp 설치 패키지다.패키지 관리자 apt-get을 업데이트 해주고 vsftpd를 설치한다. 12sudo apt-get updatesudo apt-get install vsftpd 설치된 vsftpd를 재실행시키고 ubuntu가 실행될 때마다 함께 실행되도록 설정한다. 12sudo systemctl restart vsftpd.servicesudo systemctl enable vsftpd.service 설치가 완료되면 vsftpd 설정 파일로 가서 몇가지 설정을 바꾼다. 1sudo vim /etc/vsftpd.conf userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO 주석을 해제하면 됐었던 것 같은데 찾기 귀찮아서 그냥...