Posts by Category

Algorithm

[SWEA] 12532. 인플레이션 (C++, 라이브러리 X)

B형 실전 문제 풀이 최소값의 최대값을 구하는 전형적인 이분탐색 문제이다. 그러나 Price가 99자리수로 하나의 변수에 담기엔 너무 크다. 문자열 형태로 연산을 할 경우 연산 한번에 100번의 연산이 필요하므로 매우 비효율적이다. 따라서 price를 8개의 long ...

[SWEA] 9462. 여행상품추천 (C++, 라이브러리 X)

B형 실전 문제 풀이 User는 Array에 저장하고, Product는 pid를 기준으로 hash table에 저장하였다. 추가로 각각의 Area에 따라 Product들을 Heap으로 구성하였다. 실수 이중 for문에서 i 와 j 잘 구분하기.

[SWEA] 11696. 멀티유저 파일시스템 (C++, 라이브러리 X)

B형 실전 문제 풀이 모든 텍스트는 8자 이하의 알파벳 소문자이므로 hash로 40bit에 1대1 대응시킬 수 있다. 따라서 unsiged long long 의 hash값을 이용하기로 했다. User와 Group은 각각 20개, 10개로 개수가 적으므로 배열로 저장하였다...

[SWEA] 11716. 도서관 정리 (C++, 라이브러리 X)

B형 실전 문제 풀이 도서의 제목을 저장한는 Trie와 분류를 저장하는 배열을 만든다. 분류는 3글자 이하이므로 Hash를 통해 1대1 대응시킬 수 있다. 또한 테스트케이스당 500개 이하의 분류가 존재하므로 구역의 수(100) * 분류의 수(500) 의 2차원 배열을 ...

[SWEA] 9468. 친구 추천 (C++, 라이브러리 X)

B형 실전 문제 풀이 Graph와 Bucket을 이용했다. Graph와 Linked List를 이용해서 Edge를 만들면 Edge를 Delete할 때 해당 node의 모든 edge를 탐색하야하므로 시간초과가 난다. 그렇다고해서 N * N의 edge 배열을 만들기엔 N이 ...

[SWEA] 9467. 문자열 암호화 (C++, 라이브러리 X)

B형 실전 문제 풀이 바꾸는 문자열이 3글자로 고정돼있으므로 Hash를 이용하면 1대1 매핑이 가능하다. 문자열의 크기 (50000), change 호출 횟수(50000) 을 고려하면 완전 탐색은 50000 * 50000 로 시간초과가 난다. 그래서 Hash Table을...

[SWEA] 12526. 자동완성 (C++, 라이브러리 X)

B형 실전 문제 풀이 Trie를 만들고 카운트(cnt), 밴 여부(ban), 추천 노드(best) 를 저장. input을 할 때마다 카운트를 1씩 더하고, 부모 노드를 순회하면서 best와 비교 및 교체. ban을 하면 ban을 true로 해서 추천되지 않도록 하고, 부...

[SWEA] 7091. 은기의 아주 큰 그림 (C++, 라이브러리 X)

Hash 기본문제 풀이 Rabin-Karp 알고리즘을 사용하여 그림의 해시값을 구하여 은기와 선생님의 그림을 비교한다. 먼저 가로의 해시값을 구하고 가로의 해시값으로 세로의 해시값을 구한다. 실수 가로와 세로에 같은 Hash function을 사용하면 전체 Hash f...

[SWEA] 4753 호둥이의 단어찾기 (C++, 라이브러리 X)

Trie 기본문제 풀이 이전 Trie 기본문제들과 동일하게 카운트를 가진 Trie를 구현함. 비교횟수는 탐색하면서 거쳐온 노드의 카운트의 합. 단어의 순서가 사전순이 아니라 입력순이기 때문에 사전에 단어가 존재할 경우는 입력 단계에서 답을 미리 구해놓아야함.

[SWEA] 1256. K번째 접미어 (C++, 라이브러리 X)

Trie 기본문제 풀이 Trie를 구현하고, 각각의 노드에 해당 노드로 시작하는 단어의 개수(cnt)와 해당 노드로 끝나는 단어의 존재 여부(end)를 저장함. 모든 단어를 Trie에 넣고, cnt가 K를 넘어가지 않도록 탐색.

[SWEA] 1249. 보급로 (C++, 라이브러리 X)

Heap 기본문제 풀이 복구 시간을 기준으로 Min Heap을 만듦. 복구 시간이 최소인 지점(Pop)에서 상하좌우로 이동했을 경우 좌표와 복구 시간을 Min Heap에 넣어줌(Add) 이렇게 되면 복구 시간이 최소인 지점이 N-1, N-1 일때 복구 시간이 정답이 됨....

[SWEA] 3000. 중간값 구하기 (C++, 라이브러리 X)

Heap 기본문제 풀이 Max-Heap과 Min-Heap을 이용해서 중간값을 실시간으로 구할 수 있습니다. Max-Heap과 Min-Heap을 따로 구현해주었습니다. MinHeap에는 MaxHeap[0]보다 큰 값들만 넣어주고 작은 값들은 MaxHeap에 넣어줍니다. ...

[SWEA] 1233. 사칙연산 유효성 검사 (C++, 라이브러리 X)

Tree 기본문제 풀이 Tree 기본문제이지만 Tree를 만들 필요가 없음. 입력을 받는 단계에서 유효성 검사 가능. 노드가 연산자일 경우 두개의 자식 노드가 존재해야하고, 수일 경우 자식 노드가 없어야함. 노드의 인덱스 * 2 가 N 보다 작을 경우 두개의 자식 노드...

[SWEA] 1232. 사칙연산 (C++, 라이브러리 X)

Tree 기본문제 풀이 기호, 숫자, 자식노드에 따라서 입력 형태가 바뀜. 따라서 문자열로 받아서 파싱. root 부터 재귀적으로 자식 노드 탐색 및 계산.

[SWEA] 1231. 중위순회 (C++, 라이브러리 X)

Tree 기본문제 풀이 자식 유무에 따라서 input 개수가 달라짐. cin.get() 함수로 줄바꿈 문자인지 체크. (cin.get()은 한문자씩 입력받고, 공백 문자나 개행 문자를 생략하지 않음.) Inorder 함수를 이용하여 in-order 형식으로 Tree 순...

[SWEA] 8935. 스팟마트 (C++, 라이브러리 X)

DP 실전문제 풀이 M개의 봉지 B를 오름차순으로 정렬. dp[n][l][r][take] 설정. (현재 상태에서 최대 과자 개수) n은 N개의 봉지 중에서 n번째 봉지까지 확인한 상태. l은 M개의 봉지 중에서 l개를 가져간 상태. (항상 큰 봉지 먼저 가져감) r은...

맨 위로 이동 ↑

LoL

[LoLog.me] 리그오브레전드 전적 상세 조회 기능 추가

LoLog.me 에서 이제 개별 전적을 조회할 수 있습니다. 유저들에게 가장 친숙한 리그오브레전드 게임 클라이언트의 매치 히스토리 UI를 본따서 제작하였습니다. 그리고 유저들이 궁금해할 만한 정보들을 추가했습니다. 또한 닉네임을 클릭하면 해당 유저를 바로 검색할 수 있습니다.

[LoLog.me] 한달간 업데이트 내역

LoLog.me 사이트를 제대로 만들어 보겠다는 포스트를 업로드한 후로 딱 한달이 지났습니다. 그동안 업데이트한 내용들을 정리해볼까 합니다.

Riot API - Production API Key 승인!

며칠전 신청했던 Riot API Production Key 발급이 승인되었습니다! 이제 LoLog.me 를 지속적으로 서비스할 수 있게 되었습니다. 신청서를 제출하고 승인이 되기까지 3-4일 정도 시간이 걸렸습니다. 생각보다 빠르게 돼서 놀랐네요 ㅎㅎ

LoLog.me - 롤 전적검색 사이트

웹프로그래밍 공부할 겸, 롤 전전검색 사이트를 만들어봤습니다. LoLog.me GitHub Contribution Graph를 본따서 게임 플레이한 횟수를 그래프화해서 보여주는 웹사이트입니다. 처음에는 간단히 만들 생각이었지만 만들다보니 점점 욕심이 커지더군요… 추가...

Riot API 사용법 - 계정 생성 & 소환사 정보 가져오기

리그오브레전드를 해봤다면 OP.GG, YOUR.GG 등 전적검색 사이트를 이용해본 경험이 있을 겁니다. 전적검색 사이트들은 Riot에서 제공하는 Riot API를 이용하여 유저들의 정보를 가져옵니다. Riot API를 이용해서 저만의 롤 전적검색 사이트를 만들어 보려합니다. ...

맨 위로 이동 ↑

JavaScript

JavaScript 도넛 차트 만들기[Google Charts]

Google Charts는 예전에 포스팅했던 Frappe Charts와 비슷한 기능을 하는 자바스크립트 차트 라이브러리입니다. 사용법도 거의 비슷하고, 구글에서 만든 모듈인지라 문서화가 잘 돼있습니다. Google Charts

JavaScript 차트 만들기[Frappe Charts]

Frappe Charts는 SVG 차트를 쉽게 만들게 해주는 오픈소스 모듈입니다. 여러가지 종류의 깔끔한 그래프들을 간편하게 만들 수 있습니다.

jQuery 설치 없이 사용하기[CDN]

여러 회사에서 제공하는 jQuery CDN을 이용하면 jQuery를 쉽고 빠르게 이용할 수 있습니다. CDN (Content Delivery Network) CDN은 인터넷 컨텐츠 (html, javascript 등)를 제공하기 위해 전세계에 분산되어 있는 서버입니다. C...

맨 위로 이동 ↑

Visual Studio Code

Visual Studio Code에서 GCC 사용하기

리눅스 환경에서는 터미널에서 GCC를 쉽게 설치하고 사용할 수 있습니다. 그러나 윈도우에서는 다소 번거로운 작업이 필요합니다. 윈도우 cmd(명령 프롬프트)에서 GCC를 사용할 수 있도록 세팅을 하고 VS code에서 f5키를 눌렀을 때 디버그가 실행되도록 설정해봅시다.

맨 위로 이동 ↑

GitHub

[PAT] GitHub Personal Access Token(PAT) 발급 & 캐싱

AWS EC2 Linux 서버에서 GitHub id, password를 사용하여 git pull을 할 때마다 [GitHub] Deprecation Notice라는 제목의 메일이 왔습니다. id와 password를 통해 깃허브에 접근하는 것이 보안상의 이유로 곧 사용할 수 없게 ...

[subtree] GitHub Repository 합치기

git subtree add를 이용하면, 하나의 repository 안에 다른 repository를 그대로 복사해올 수 있습니다. 이때, 기존의 commit log를 함께 복사해올 수 있습니다!

맨 위로 이동 ↑

Node.js

Node.js로 네이버 크롤링하기(맛보기)

Node.js를 이용하면 웹 크롤링을 간편하게 해볼 수 있습니다. 저는 crawler모듈을 사용하여 네이버 홈페이지를 크롤링해보겠습니다. GitHub에서 코드 미리보기 목표 네이버 메인페이지에서 언론사 리스트를 가져와 출력해보고자 합니다.

맨 위로 이동 ↑

AWS

터미널로 AWS EC2 Linux 인스턴스 연결하기

AWS Console에 로그인할 필요 없이 터미널에서 AWS EC2 Linux 인스턴스에 연결하거나 파일을 전송하는 방법입니다. 단, 인스턴스를 생성할 때 설정한 프라이빗 키(.pem)가 있어야 합니다.

맨 위로 이동 ↑

MySQL

맨 위로 이동 ↑

Blender

맨 위로 이동 ↑

Blog

[Jekyll, GitHub Page] URL 변경 및 리다이렉트하기

제 블로그는 Jekyll과 GitHub Page 로 구현되어 있습니다. Jekyll의 기본설정에 따라, 포스트의 url이 /카테고리/타이틀로 설정 되어있었습니다. 이게 맘에 들지않아 url을 제 임의로 수정하고 기존의 url이 404 not found를 띄우지 않도록 Redir...

맨 위로 이동 ↑