본문 바로가기

전체 글

(89)
Algorithm/LeetCode LeetCode #232 - Implement Queue using Stacks(스택을 이용한 큐 구현) 풀이 문제 2개의 스택만을 사용하여 FIFO 큐를 구현하여야 하는 문제이다. 구현된 큐는 일반 큐의 모든 기능(push, pop, empty)를 지원하여야 하며 구현해야 하는 MyQueue 클래스는 다음과 같다. push(x: int) -> void : x를 큐의 맨 뒤에 넣는다. pop() -> int : 큐의 가장 앞에 있는 요소를 삭제하고 반환한다. peek() -> int : 큐의 맨 앞에 있는 요소를 반환한다. empty() -> boolean : 큐가 비어있으면 true, 그렇지 않으면 false를 반환한다. 이때, 아래 사항을 참고하여야 한다. 스택의 기본 연산(push to top, peek or pop from top, size 및 is empty)만 사용하여야 한다. 언어에 따라서는 스택이 ..
Algorithm/LeetCode LeetCode #049 - Group Anagrams(그룹 애너그램) 문제 풀이 문제 문제의 애너그램은 특정 문자열의 문자를 재배치하여 만든 새로운 문자열이며, 문제에서는 여러 개의 문자열이 배열로 주어질 때 애너그램으로 짝짓고 반환할 것을 요구하였다. 문제를 보자마자 엑셀에서의 '중복 제거'가 떠올랐다. 즉, 특정 대상의 통계를 구하기 위해서는 해당 대상을 중복 제거하여야 한다. 이를 가능케 하는 방법으로 다음과 같이 크게 2가지를 떠올려보았다. 문자열을 구성하는 문자의 ascii 코드의 총 합을 기준으로 중복 제거가 가능하다. 문자열을 구성하는 문자를 정렬하면 중복을 제거할 수 있다. 이 중에서 두 번째 방법이 훨씬 직관적인 코드로 나타낼 수 있다고 생각하여 두 번째 방법으로 시도해보았다. 풀이 딕셔너리를 사용한 해시테이블 생성 딕셔너리의 key는 문자열의 문자를 ..
Algorithm/LeetCode LeetCode #206 - Reverse Linked List(역순 연결 리스트) 풀이 문제 문제의 내용을 요약하면, 연결 리스트를 역순으로 재구성한 후 반환하여야 한다. 풀이 이 문제는 21. Merge Two Sorted Lists와 같이 새로운 노드를 생성하는 방식으로 해결하는데, 문제에서 주어진 예시로 과정을 나타내보면 다음과 같다. 더미 노드 생성 현재 노드(current)를 연결 리스트의 head로 정하고, 새로운 노드(node를 None으로 초기화한다. current, node = head, None 반복하며 스와핑 현재 노드 즉, 기존 연결 리스트의 head가 되는 모든 노드를 탐색하며 새로운 노드로 값을 넘겨준다. 이 과정을 다음과 같이 나타낼 수 있다. 첫 번째 반복 current: ListNode: [1 -> 2 -> 3 -> 4 -> 5] 1) next = ListNo..
Algorithm/LeetCode LeetCode #021 - Merge Two Sorted Lists(두 개의 연결 리스트 병합) 풀이 문제 문제내용을 살펴보면, 정렬된 두 개의 연결 리스트의 노드를 결합하여 다음 그림과 같이 하나의 정렬된 연결 리스트로 병합하여야 한다. 본 내용은 leetcode에서 제공한 아래 그림을 토대로 작성하였기 때문에 그림 1(node2로 이동), 그림 5(node1로 이동)와 같이 값이 동일한 경우 포인터를 어디로 변경할 것인지 헷갈릴 수 있다. 결론만 말하자면, 두 개의 노드 값이 동일한 경우 node1, node2 중 아무거나 선택해도 무방하다. 풀이 문제에서 주어진 예시(list1 = [1, 2, 4], list2 = [1, 3, 4])를 그림으로 나타내면 다음과 같다. 이 둘은 노드의 값을 기준으로 오름차순으로 정렬되어 있으며, 가장 왼쪽에 있는 노드가 각 연결 리스트의 head라고 할 수 있다. 그..
Development/회고록 항해99 Chapter #1 - 1조 S.A(Starting Assignment) 개요 프로젝트 프로젝트명 : Hello Word 내용 : 코딩도 중요하지만, 개발자의 문서는 대부분 영어로 되어 있기에 영어 공부도 빠뜨릴 수 없다. 따라서, 간단하게 영어 단어를 암기할 수 있는 나만의 단어장개발을 프로젝트 주제로 선정하였다. 목표 기본적인 웹개발 지식을 갖춘다(좁은 범위의 주제로 선정). 팀으로 하나되어 서비스를 완성하는 경험을 쌓는다. jinja2 템플릿 엔진을 이용한 서버사이드 렌더링을 구현하고, 장점을 파악한다. JWT 인증 방식으로 로그인 기능을 구현하고, 세션/쿠키 방식과의 차이점 및 장단점을 파악한다. 팀원 최원영(팀장) : https://github.com/choewy 하상우 : https://github.com/voyager16 홍승민 : https://github.co..
Development/Web Open API 사용 시 발생하는 CORS 이슈, 원인과 해결 방법 정리 들어가며 오랜만에 Frontend를 연습할 겸 공공데이터포털 사이트에서 오픈 API를 사용해보았다. 그런데, CORS 이슈가 발생하는 탓에 결국에는 Node.js(express)로 Proxy 서버를 구축하여 개발하였다. 🔗 소스코드 : https://github.com/choewy/medical-maps-api-proxy-ssr CORS CORS(Cross-Origin Resource Sharing)을 해석해보면 교차 출처 리소스 공유라고 하는데, 도대체 이게 무슨 말인지 알 수 없었다. 폭풍 구글링하고, 구글링한 정보를 취합해서 간단하게 설명하자면 다음과 같다. 📌 API 개념 요약 API가 무엇인지 생각하면 CORS를 이해하는데 도움이 될 것이라고 생각한다. API를 간략히 설명하자면 클라이언트와 서..
Development/Web Express + MVC pattern (3) - 회원가입 기능 구현 및 완료 이어가며 지난 글에서는 컨트롤러를 구현부터 모델로 로그인 기능을 구현하는 부분까지 정리하였다. 이번에는 모델로 회원가입 기능 구현과 최종 결과를 정리해보도록 하겠다. 회원가입 기능 구현 🔗 소스코드 : v1.0.7-model2 지난 글의 로그인 기능 구현에 이어서 이번에는 회원가입 기능을 구현해보도록 하겠다. 회원가입 시 기존의 데이터에 새로운 데이터를 추가하되, 아이디가 이미 존재하는 경우에는 회원가입이 진행되지 않도록 해야한다. 모든 사용자 데이터 조회 이를 위해 아래와 같이 코드를 작성하여 기존의 모든 데이터를 불러오도록 하였다. /* ./app/src/models/UserStorage.js */ "use strict"; const fileSystem = require('fs').pr..
Development/Web Express + MVC pattern (2) - Contoller 기능 구현, DB 구축, fetch, Model로 구현한 로그인 처리 이어가며 지난 글에서는 프로젝트 초기 설정부터 View 기능 개발까지 정리해보았다. 이번에는 컨트롤러를 구현하고, 모델로 로그인 기능을 구현하는 부분까지 정리해보도록 하겠다. Controller 구현 🔗 소스코드 : v1.0.4-controller 이전에는 라우터에서 직접 웹 페이지를 렌더링 할 수 있도록 코드를 작성하였는데, 이러한 동작을 컨트롤러를 통해 할 수 있도록 코드를 수정해보겠다. 먼저, 컨트롤러는 두 개의 object로 구성할 건데, 첫 번째는 웹 페이지를 렌더링시켜주는 render, 두 번째는 HTTP 요청에 맞는 로직을 처리하는 process로 구성하겠다. 이를 ./app/src/routes/home/index.controller.js에 작성하면 아래와 같다. /* ./app/src/ro..
Development/Web Express + MVC pattern (1) - 프로젝트 초기 설정, View 기능 개발 들어가며 아키텍처 패턴(Architecture patterns)에는 MVC(Model-View-Controller), MVP(Model-View-Presenter), MTV(Model-Template-view) 등 여러 패턴이 존재한다. 이 중에서 MVC 패턴은 주로 Spring 프레임워크에서 사용되는 것으로 알고 있으나, 필자의 경우 Spring은 고사하고 Java를 다뤄볼 기회가 없었기 때문에 MVC 패턴이 무엇인지에 대해서 항상 궁금했었다. 따라서, MVC 패턴을 적용한 express로 로그인과 회원가입 기능을 간단하게 구현하면서 MVC 패턴이 어떻게 동작하는지 정리해보았다. 🔗 MDN - MVC pattern 🔗 MVC 패턴(written by. bp.chys) 🔗 YouTube - Node.js..
Development/Web Node.js의 라이브러리 http와 express로 구현한 서버와 이 둘의 차이점 들어가며 Node.js로 웹 서버를 구현하기 위한 대표적인 라이브러리는 express이다. Node.js의 내장 라이브러리인 http로도 웹 서버를 구현할 수 있는데, 대부분 express로 웹 서버를 구현한다. http와 express로 서버를 구현해보면서 이 둘의 차이와 왜 express가 사용되는지에 대해서 간단히 정리해보았다. http로 구현한 서버 http는 Node.js의 내장 라이브러리로, 별도로 설치할 필요가 없다. 아래는 http로 구현한 Node.js 서버 코드이며, 먼저 코드를 살펴보자. "use strict"; const http = require('http'); const app = http.createServer((req, res) => { if (req.url =..