Posts by Category

C#

[Effective C#] 아이템 41: 값비싼 리소스를 캡처하지 말라

클로저에 캡처된 지역변수는 수명이 늘어나고 선언된 범위를 넘어가도 가비지로 간주되지 않는다. 대부분의 경우 적절한 시점에 가비지로 수집되므로 신경쓸 것이 없다. 그러나 IDisposable을 구현한 무거운 리소스를 참조할 경우 신경써야 할 점들이 있다.

[C#] Delegate, 익명 함수, 람다식, Closure

Delegate Delegate는 delegate 타입을 만들 때 사용되는 클래스이다. delegate 타입은 특정 형식의 메서드를 참조할 수 있는 타입이다. (인스턴스 메서드, 스태틱 메서드 모두 참조할 수 있다)

맨 위로 이동 ↑

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] Riot Data 자동 업데이트 기능 추가

리그오브레전드 패치가 있을 때 마다(챔피언 추가, 아이템 변경 등) LoLog.me도 업데이트가 필요했습니다. 코드를 개선하여 1시간 마다 데이터가 자동으로 업데이트 되도록 했습니다.

[LoLog.me] Match-V5 업데이트

Riot API 의 Match-V4 지원이 종료되었습니다. 그래서 LoLog.me 서버를 Match-V5 에 맞게 업데이트했습니다.

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

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

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

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

Riot API - Production API Key 승인!

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

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

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

맨 위로 이동 ↑

Node.js

[npm 오류] Error: not found: make

앵무새봇의 서버를 증설하기 위해 새로운 AWS EC2 인스턴스를 생성하였습니다. 서버에 nvm과 Node.js를 설치하고 프로젝트를 클론한 뒤에 npm install 명령어를 실행하였으나 Error: not found: make 오류가 뜨면서 모듈 하나가 설치되지 않았습니다.

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

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

맨 위로 이동 ↑

JavaScript

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

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

JavaScript 차트 만들기[Frappe Charts]

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

맨 위로 이동 ↑

Study

삼성전자 SW 역량테스트 B형 후기 1 (준비)

삼성전자 S/W 알고리즘 특강을 수강하여 운좋게 삼성전자 SW 알고리즘 역량테스트 B형(pro) 을 치를 기회를 얻었습니다. 2회의 기회가 주어졌고 저는 두번째 테스트에서 통과하여 B형을 취득하였습니다.

삼성전자 2021 하계 대학생 S/W 알고리즘 역량강화 특강 수료 후기

2021.07.19 ~ 2021.08.27 6주간 삼성전자 하계 알고리즘 역량강화 특강에 참여하고 수료하였습니다. 이 과정은 삼성전자 SW 역량테스트 B형(Pro) 를 취득하는 것을 목표로 구성된 프로그램입니다. 교육 기간이 종료된 이후에 SW 역량테스트 B형에 응시할 수 있는...

맨 위로 이동 ↑

Books

[Books] 레버리지

레버리지 (Life Leverage) 저자: 롭 무어 출판사: 다산 북스 발행일: 2022.06.22 (양장특별판 18쇄 발행) / 초판 1쇄 발행: 2017.05.08

[Books] 이펙티브 엔지니어

이펙티브 엔지니어 - 개발자의 인생을 바꾸는 효율성의 법칙 (The Effective Engineer) 저자: 에드먼드 라우 출판사: 길벗 발행일: 2022.06.27 (초판 발행) / 원서: 2015.03

[Books] 액티브 리딩

액티브 리딩 - 즉시 행동하는 사람의 독서법 (SECRETS OF ACTIVE READING SKILLS) 저자: 쓰카모토 료 출판사: 시원북스 발행일: 2022.07.18 (초판 1쇄 발행) / 원서: 2019.01 읽은 날: 2022.07.22 - 2022....

맨 위로 이동 ↑

Visual Studio Code

Visual Studio Code에서 GCC 사용하기

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

맨 위로 이동 ↑

AWS

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

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

맨 위로 이동 ↑

Blog

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

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

맨 위로 이동 ↑

Life

오징어 게임 징검다리 건너기 참가자별 성공 확률 1 (계산)

넷플릭스 드라마 “오징어 게임” 의 5번째 게임은 “징검다리 건너기” 입니다. 18쌍의 강화유리와 일반유리로 이루어진 징검다리를 참가자 16명이 차례로 건너는 게임입니다. 변수가 없는 상황(유리 장인 X, 기억 못하는 경우 X)에서 각 참가자별로 성공할 확률이 얼마나 되는지 ...

맨 위로 이동 ↑

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를 함께 복사해올 수 있습니다!

맨 위로 이동 ↑

MySQL

맨 위로 이동 ↑

Blender

맨 위로 이동 ↑

Java

맨 위로 이동 ↑

C++

[C++ STL] 순열과 조합 (next_permutation)

next_permutation 함수는 위와 같이 사용하고 파라미터로 보내진 Iterator 범위 내의 원소들을 다음 경우의 수 배열로 만들어 줍니다. 이 때, 오름차순에서 내림차순으로 가는 경우의 수를 고려합니다. 즉, 오름차순으로 정렬된 배열에 next_permutation 을 ...

맨 위로 이동 ↑