전체 글

전체 글

    [프로그래머스] 입실 퇴실 Javascript

    [프로그래머스] 입실 퇴실 Javascript

    https://programmers.co.kr/learn/courses/30/lessons/86048 코딩테스트 연습 - 7주차 사회적 거리두기를 위해 회의실에 출입할 때 명부에 이름을 적어야 합니다. 입실과 퇴실이 동시에 이뤄지는 경우는 없으며, 입실 시각과 퇴실 시각은 따로 기록하지 않습니다. 오늘 회의실에는 programmers.co.kr 한 방의 출입했던 사람들에 대하여 입실 순서와 퇴실 순서가 주어질 때 반드시 만날 수 밖에 없는 사람을 구하는 문제이다. 퇴실은 입실하기 전에는 일어날 수 없는 행동이다. 이에 따라 퇴실 순서와 입실 순서에 각각 인덱스를 두는 투포인터 기법을 사용했다. 퇴실 순서에 해당하는 사람이 입장하기 전까지 입실 순서에 따라 입장시킨다. 1 을 모든 사람이 퇴실할 때까지 반..

    [프로그래머스] 복서 정렬하기 Javascript

    [프로그래머스] 복서 정렬하기 Javascript

    https://programmers.co.kr/learn/courses/30/lessons/85002 코딩테스트 연습 - 6주차_복서 정렬하기 복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요 programmers.co.kr 복서들의 정보가 주어질 때, 이를 토대로 복서 정보가 담긴 배열을 정렬하는 문제이다. 즉, sort의 compare 함수를 정의하면 된다. Javascript의 sort는 compare 함수에서 음수를 반환하면 1번 파라미터가 앞의 순서에 놓이도록 정렬된다. winRate가 더 높은 요소를 앞에 배치하고 싶다면 co..

    [프로그래머스]  모음사전 Javascript

    [프로그래머스] 모음사전 Javascript

    https://programmers.co.kr/learn/courses/30/lessons/84512 코딩테스트 연습 - 5주차_모음사전 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니 programmers.co.kr 이 모음 사전은 다음과 같은 순서로 단어가 나열된다. 경우의 수를 이용하면 쉽게 해결할 수 있을 것으로 생각했다. 우선, [A, E, I, O, U] 라는 배열을 만들었다. 항상 이 순서대로 단어가 나타나므로 이 배열의 인덱스 를 활용해 몇 번째 단어인지 유추할 수 있다. A로 시작하는 단어는 총 몇개일까? ..

    [Javascript] Promise 예제 풀어보기

    [Javascript] Promise 예제 풀어보기

    https://www.codingame.com/playgrounds/347/javascript-promises-mastering-the-asynchronous Coding Games and Programming Challenges to Code Better CodinGame is a challenge-based training platform for programmers where you can play with the hottest programming topics. Solve games, code AI bots, learn from your peers, have fun. www.codingame.com 간단한 프로미스 퀴즈가 3개 있다. 다 맞은 기념으로 풀이를 정리해보고자 한다. 1번 functio..

    [백준/BOJ 알고리즘] 17845 수강 과목 C++

    [백준/BOJ 알고리즘] 17845 수강 과목 C++

    https://www.acmicpc.net/problem/17845 17845번: 수강 과목 첫줄에 서윤이의 최대 공부시간 N (1 ≤ N ≤ 10,000), 과목 수 K (1 ≤ K ≤ 1,000)이 공백을 사이에 두고 주어진다. 이후 K개의 줄에 중요도 I (1 ≤ I ≤ 100,000), 필요한 공부시간 (1 ≤ T ≤ 10,000)이 www.acmicpc.net 0-1 Knapsack 문제이다. 링크 에서 0-1 Knapsack에 대해 알아볼 수 있다. (필자가 작성한 글임) bottom-up 방식으로 DP를 구성하면 된다. O(NK)의 시간복잡도를 갖는다. #include #include #define MAX_N 10001 #define MAX_K 1001 using namespace std; ..

    [백준/BOJ 알고리즘] 10830 행렬 제곱 C++

    [백준/BOJ 알고리즘] 10830 행렬 제곱 C++

    https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 주어진 행렬 A에 대하여 입력 B만큼 제곱한 행렬을 출력하는 문제이다. B는 100,000,000,000 이하의 값을 갖는다. 즉, A를 B번 제곱하는 방식으로는 해결할 수 없다. 분할정복 을 통해 문제를 해결할 수 있다. A의 거듭제곱은 다음과 같이 나타낼 수 있다. 분할정복을 통해 100,000,000,000번 제곱한 값을 찾는다면, 약 36~7번의 연산으로 찾을 수 있다. 최종적으로 시간복잡도는 다음과 같..

    [React.js] useRef와 useState의 용도와 차이

    [React.js] useRef와 useState의 용도와 차이

    서론 리액트에서 ref와 state의 차이점은 무엇인가? 면접에서 위와 같은 질문을 받았다. 나는 ref 를 특정 DOM 엘리먼트를 가리키는 용도로만 사용해왔기에 이 질문의 의도를 파악하지 못했다. 본질적으로 사용용도가 다른데 어떤 차이점을 물어보는거지? 라고 생각했다. 면접이 끝난 뒤 계속 기억에 남아 이에 대해 찾아보았고 깨달은 바를 정리해보고자 한다. useRef useRef 는 단순 DOM 엘리먼트를 지정하는데만 사용되지 않는다. useRef 를 통해 클래스의 멤버 변수와 비슷한 역할을 하게 만들 수 있다. state 와 달리 값의 변화에 의한 리렌더링이 발생하지 않는다. current 라는 속성을 통해 어느 값이든 보유할 수 있는 일종의 컨테이너 역할을 할 수 있다. 함수형 컴포넌트는 인스턴스로..

    [Javascript] 자바스크립트 Map 정렬하기

    [Javascript] 자바스크립트 Map 정렬하기

    잡소리, 서론 코딩테스트 응시언어가 js로 제한되어있는 곳에 지원했다. 자바스크립트와 친숙했던 나지만 자바스크립트로 알고리즘 문제들을 풀어본 적이 없어서 이것저것 찾아보면서 공부하고 있다. Map이라는 자료구조가 있는 줄 모르고 객체에 삽입/삭제하면서 삽질했던 나를 반성하며 포스트를 작성한다. Map Key-Value 자바스크립트의 Map은 key-value 쌍으로 이루어져 있는 자료구조이다. key 값에 아무거나 다 넣을 수 있다. 심지어 함수도 넣을 수 있다. const testmap = new Map(); testmap.set(1,123); testmap.set(2,345); testmap.set(3,789); const funcRef = () => {}; testmap.set(funcRef, 'f..

    [React.js] crypto-js를 이용한 패스워드 암호화

    [React.js] crypto-js를 이용한 패스워드 암호화

    서론 진행 중인 프로젝트에서 간단한 익명 로그인을 구현하게 되었다. 게시글 작성 시 아이디와 패스워드를 입력받은 뒤 해당 게시물의 수정이나 삭제 요청에는 아이디 패스워드를 확인하는 구조이다. 처음에는 firebase의 실시간 데이터베이스를 사용해 게시물의 정보와 아이디, 패스워드 값을 그대로 저장했다. 하지만 유저가 입력한 정보를 데이터베이스에 전송하는 과정에서 아이디와 패스워드가 그대로 드러나기 때문에 절대 이렇게 구현을 마쳐서는 안 된다. 그저 패킷을 열어보기만 해도 유저의 정보가 유출되기 때문에... 아무리 간단한 익명 로그인이어도 '챙길 건 챙기자! '라는 마인드로 패스워드의 암호화를 진행하게 되었다. 암호화 crypto-js 패키지를 사용했고 그중 PBKDF2 알고리즘을 선택했다. PBKDF2는..

    [Network] HTTP와 HTTPS

    [Network] HTTP와 HTTPS

    HTTP HTTP = HyperText Transfer Procol OSI 7계층중 7계층 응용계층에 속하는 프로토콜이다. Stateless 한 특성을 갖는 프로토콜이다. Method, Path, Version, Header, Body 등으로 구성된다. Request와 Response로 통신을 하는 비연결성 프로토콜이다. 단점 평문 텍스트, 즉 암호화되지 않은 텍스트를 전송하는 프로토콜로, 중간자 공격에 취약하다. 변조, 위장, 도청에 취약하다. HTTPS HTTPS = HyperText Transfer Protocol over Secure Socket Layer = HTTP over SSL = HTTP over TLS 쉽게 말해서 HTTP의 단점인 보안성을 보완한 프로토콜이다. 데이터 암호화 기능이 추..