분류 전체보기 13

[프로그래머스/Python] 가사 검색 (2020 KAKAO BLIND RECRUITMENT)

가사에 사용된 모든 단어들이 담긴 배열 words와 찾고자 하는 키워드가 담긴 배열 queries가 주어질 때, 각 키워드 별로 매치된 단어가 몇 개인지 순서대로 배열에 담아 반환하도록 solution 함수를 완성해 주세요. words queries result ["frodo", "front", "frost", "frozen", "frame", "kakao"] ["fro??", "????o", "fr???", "fro???", "pro?"] [3, 2, 4, 1, 0] bisect_right, bisect_left의 value에 문자열도 들어갈 수 있다는 사실을 이용한다. q(쿼리)가 ---??의 경우 ---aa부터 ---zz사이에 있는 words의 ---로 시작하는 5글자 문자열의 개수를 셀 수 있는데..

Algorithm/Python 2021.04.03

[백준/Python] 2110번 : 공유기 설치

#집 N개가 수직선 위에 있다. 각 집의 좌표는 x1,x2,..xn이고 겹치지 않는다 #한 집에는 공유기를 하나만 설치가능. 가장 인접한 두 공유기 사이의 거리를 가능한 크게. #c개의 공유기를 n개의 집에 설치 #가장 인접한 두 공유기 사이의 거리를 출력 mid를 집의 좌표가 아닌 설치간격으로 둔다는 것이 인상적이다(mid의 범위는 start와 end 사이에서 조정된다). 이진탐색을 이용하면 1(집 사이의 최소 간격)부터 최대 간격(처음과 끝 집의 거리)를 모두 탐색하지 않고 더 빠르게 적절한 설치간격mid를 찾을 수 있다. 공유기를 설치할 때, 인접한 다른 공유기와의 간격은 적어도 mid보다는 커야 하고, 간격mid가 너무 커서 c개만큼 설치할 수 없는 경우, 설치간격mid를 줄인다. c개 이상의 공..

Algorithm/Python 2021.04.03

[스터디/Node.js교과서] 익스프레스 웹 서버 만들기 - 02 Router 관리

app.js에서 라우터를 많이 연결하면 코드가 길어지므로 익스프레스에서는 라우터를 분리할 수 있는 방법을 제공합니다. routes폴더를 만들고 그 안에 index.js와 user.js를 작성합니다. 1 2 3 4 const express=require('express'); const router=express.Router(); router.get('/', 미들웨어); #router라는 변수에 모든 라우터를 담는다 module.exports=router; #router를 module로 내보내서 app.js에서 받을 것이다 cs 1 2 3 4 const express=require('express'); const router=express.Router(); router.get('/', 미들웨어); #rout..

Web/Node.js 2021.03.29

[스터디/Node.js교과서] 익스프레스 웹 서버 만들기 - 01 미들웨어란?

const app=express(); app.set(키, 값): 데이터를 저장. 이 데이터를 app.get(키)로 가져올 수 있음 app.get(주소, 라우터): 주소에 대한 GET요청이 올 때 어떤 동작을 할지 적는 부분 - app.get('/', (req,res)=>{ res.send('Hello Express'); : 응답을 보냄 res.sendFile(path.join(__dirname, 'index.html')); : HTML로 응답. 파일의 경로를 path모듈을 사용해 지정 }); 이 외에도 app.post, app.put, app.patch, app.delete, app.options 메서드가 존재 app.listen(포트); : 포트를 연결하고 서버를 실행 미들웨어 : 요청과 응답의 중간...

Web/Node.js 2021.03.29

[프로그래머스/python] 실패율 (2019 KAKAO BLIND RECRUITMENT)

문제 설명 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프렌즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변..

Algorithm/Python 2021.03.27

[백준/Python] 14502번 : 연구소

0은 빈 칸, 1은 벽, 2는 바이러스가 있는 곳 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 임의의 빈 칸에 벽을 3개 세운 뒤, 바이러스가 퍼질 수 없는 곳을 안전 영역이라 한다. 동시성과 상관 없이 바이러스가 트리의 모든 깊숙한 곳까지 퍼져나갈 것을 그려본다면 DFS를 활용해야한다는 것을 알 수 있다. graph를 통해 맵을 입력받고, 벽을 어디에 세울지 조합을 통해 결정해야하므로 avail리스트에 0으로 표시된 좌표들만 저장하고, 초기 바이러스의 위치를 저장해둬야 dfs함수를 통해 바이러스를 전파할 수 있으므로 virus_start 리스트에 2로 표시된 곳들을 저장한다. dfs함수는 현재 위치가 방문하지 않은 빈 칸일 경우, 자신의 위치에 바이러스를 감염시키고 상하좌우로 재귀함..

Algorithm/Python 2021.03.20

[백준/Python] 14888번 : 연산자 끼워넣기

N개의 수와 N-1개의 연산자가 주어졌을 때, 만들 수 있는 식의 결과가 최대인 것과 최소인 것을 각각 구하는 프로그램이다. 단순한 사칙연산을 계속 반복하는데, 연산자(+,-,*,//)들이 담긴 queue들이 눈 앞에 아른거린다면 bfs를 고려해봐야한다. 너비 탐색은 queue나 재귀함수로 구현할 수 있는데, 재귀함수로 구현하는 편이 더 쉬울 것 같아서 택하게 되었다. 숫자 연산은 1+2+3 이런 식일 때, (1+2)+3 = (3+3) =6 이렇듯이 앞 쪽부터 두 개의 피연산자씩 묶어서, 다음 함수로 전달할 때는 결과값과 '이번이 마지막 연산이었다'를 알리기 위한 index를 전달해줘야 한다. 또한 숫자열은 사용되는 순서가 항상 같으므로 index를 통해 숫자열 안의 숫자들을 차례대로 연산해나간다. 마지..

Algorithm/Python 2021.03.15

[백준/Python] 18405번 : 경쟁적 전염

'낮은 번호의 바이러스부터 증식한다' 는 것에서 sort메소드를 생각해내는 것이 핵심이다. 같은 시간, 같은 위치에 서로 다른 바이러스가 당도한다고 쳐도, 작은 순으로 정렬된 바이러스를 queue에 넣으면 자연스럽게 번호가 작은 바이러스가 먼저 공간을 차지하는 것을 알 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 from collections import deque n,k=map(int,input().split()) #col수, 바이러스 종류 maps=[] data=[]#바이러스에 대한 정보(종류,시간,x,y좌표) for i in range(n): maps.append(list(map(int,(inp..

Algorithm/Python 2021.03.15

[백준/Python] 15686번 : 치킨 배달

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #빈(0),집(1),치킨(2) #집과 가장 가까운 치킨집 사이의 거리. |r1-r2| + |c1-c2| #치킨집 중에서 최대 M개를 고르고. 어떻게 고르면, 도시의 치킨 거리가 가장 작게 될지 #n:도시크기(n*n) m:놔둘치킨집의 개수 from itertools import combinations import sys n,m=map(int,input().split()) maps,house,chicken=[],[],[] for _ in range(n): maps.append(list(map(int,input().split()))) for i in range(n):..

Algorithm/Python 2021.03.10