본문 바로가기

분류 전체보기

(61)
[Node.js] 서버 만들기 & fs모듈을 promise 형식으로 활용 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청의 처리한 뒤 클라이언트에 응답(response)을 보낸다. 따라서 서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다. 요청과 응답은 이벤트 방식이라고 생각하면 된다. 클라이언트로부터 요청이 왔을때 어떤 작업을 수행할지 이벤트 리스너를 미리 등록해두어야 한다. const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.write('Hello Node!'); res.write('Hello server'); res.end..
[Python] 딕셔너리의 기능들 두 리스트를 합치고 싶을때는 그냥 '+' 연산자를 활용하면 된다. a=[1,1,2,3,3] b=[3,4,5] print(a+b) #[1,1,2,3,3,3,4,5] 하지만 두 리스트에서 공통된 부분을 삭제해야 할 경우에는 어떻게 해야할까? 그냥 '-' 연산자를 쓰면 될까? a=[1,1,2,3,3] b=[3,4,5] print(a-b) #TypeError: unsupported operand type(s) for -: 'list' and 'list' 위 처럼 오류가 뜬다. list끼리는 '-' 연산자를 지원하지 않는다. 그렇다면 어떻게 하면될까? 여기서 집합 자료형을 사용할 수 있다. a=[1,1,2,3,3] b=[3,4,5] print(set(a)-set(b)) #{1,2} print(list(set(a)..
[Node.js] fs.readFile (파일 읽기) / fs.readdir(파일 목록 가져오기) fs모듈에는 많은 메소드들이 있다. 그 중에서 파일을 읽는것과 관련한 메소드들이 있다. 대부분의 메소드들은 동기식 IO와 비동기식 IO를 모두 제공한다. 보통 메소드에 Sync라는 이름이 붙어있으면 동기방식을 사용한다고 보면 된다. 동기적 읽기방식은 파일을 읽으면서 다른 작업들을 동시에 할 수 없고, 값을 함수 안에서 바로 리턴한다. 비동기적 읽기방식은 파일을 읽으면서 다른 작업들도 동시에 수행할 수 있고, 파일을 다 읽으면 매개변수 callback으로 전달한 함수가 호출된다. 비동기 형식은 항상 마지막 인수가 수행 완료되었을때 호출할 콜백 함수로 작성되어야 한다. 참고로 오늘 소개할 두 메소드들은 둘다 callback함수를 통해서 비동기식방식으로 처리된다! 파일 읽기 : fs.readFile // no..
[Node.js] URL의 구조와 url모듈 URL의 구조 URL이란 웹 사이트의 주소를 칭하는 말이다. 그럼 URL의 구조를 분석해보자. protocol : 프로토콜(규약). 브라우저가 어떤 규약을 사용해야 하는지를 나타낸다. http, https 등이 있다. host(domain) : 자원이 위치한 주소이다. 한마디로 어떤 웹 서버가 요구되는지를 가리키는 것이다. 직접 IP주소로 사용할 수 있으나 웹에서 주로 사용되지는 않는다. port : 한 개의 컴퓨터 내에 여러대의 서버가 있다. 그 중에서 어떤 서버에 연결한지를 나타내는 것이다. 보통 포트번호 80은 생략한다. path : 웹 서버 내에서 자원 경로를 구분하기 위하여 사용된다. query string : 웹 서버에 제공하는 추가 파라미터이다. 이 파라미터는 & 기호로 구분된 key/val..
[알고리즘/Python] 투 포인터 알고리즘 (Two Pointers Algorithm) 크기가 N인 리스트가 있을때 그 리스트를 완전 탐색으로 해결해버리면 O(N^2)의 시간이 소요된다. 아래에서 소개하는 알고리즘을 활용하면 선형시간으로 문제를 해결할 수 있다. 투포인터 알고리즘 리스트에 순차적으로 접근해야 할 때 2개의 점(start, end)의 위치를 기록하면서 처리하는 알고리즘이다. 리스트의 특정 연속된 구간을 처리하는 경우에 매우 유용하다. ex) 특정합을 가지는 부분 연속 수열, 팰린드롬 등의 문제에 활용 가능하다. 예제문제를 풀어보자. https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으..
[백준 2667번 / 실버1] 단지번호붙이기 - (Graph Traversal) https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net from collections import deque def apart(data): num,cnt=0,0 result=[] queue=deque() dx=[1,0,-1,0] dy=[0,1,0,-1] for i in range(n): for j in range(n): if data[i][j]==1: queue.append([i,j]) data[i][j]=0 cnt+=1 while queue: x,y=..
[LeetCode 49번] Group Anagrams - (문자열 처리) https://leetcode.com/problems/group-anagrams/ Group Anagrams - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 입력된 여러 문자열들을 Anagram끼리 묶어서 return해주는 함수를 짜는 문제이다. def groupAnagrams(strs): info,result=[],[] print(result) for str in strs: info.append([char for char in str]) for i in in..
[Python] 딕셔너리의 기본값 처리 (defaultdict) 일반적으로 파이썬의 딕셔너리에서 미리 삽입하지 않은 키를 호출할 경우에는 오류가 발생한다. dic=dict() print(dic['A']) >>>KeyError: 'A' 오류 발생! 딕셔너리에 'A'라는 키의 값을 삽입하지 않았으므로 오류가 발생하는건 당연하다. 이를 해결하기위해 아래처럼 setdefault라는 함수를 사용할 수 있다. dic=dict() dic.setdefault("A",1) setdefault를 이용하면 key값을 삽입할때마다 매번 함수를 호출해야하는 번거로움이 있다. 딕셔너리를 선언함과 동시에 미리 지정한 값이 설정되도록 할 수는 없을까? 이때 collections 모듈에 있는 defaultdict 라는 함수가 등장한다. from collections import defaultdic..