본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

분류 전체보기580

[Node.js] URL의 query string 추출 (GET방식) URL 구성요소 ex) http://localhost:3000/?name=kimcoder&age=23 http : protocol, 통신규약 localhost : host(domain) :3000 : 포트넘버, 생략시 80번 ?name=kimcoder&age=23 : query string, 서버에 전달되는 데이터이다. '?'으로 시작하며 '&'를 경계로 변수명=값 형태로 들어오게 되는데, 이 쿼리 스트링은 name,age 라는 2개의 변수가 각각 kimcoder, 23이라는 값을 가지고 온 것이다. var http = require('http'); var fs = require('fs'); var url = require('url'); var app = http.createServer(function(.. 2020. 10. 5.
[그리디, 난이도 중] 프로그래머즈, 구명보트 그리디 알고리즘이기 때문에 먼저 people을 오름차순으로 정렬하였다. 본인이 첫 번째로 생각한 접근법은 단순히 체중이 가벼운 순으로 묶는 방법이었다. 50 50 70 80 이 주어졌다면, (50,50),(70),(80) 총 3개의 보트로 테스트 케이스와 일치 50 70 80 이 주어졌다면, (50),(70),(80) 총 3개의 보트 테스트 케이스와 일치 그러나 이 접근법은 5 10 90 95 라는 반례와 막히게 된다. 이 경우에는 내 첫 번째 접근법으로는 답이 3이 나오는데, (5,95),(10,90) 총 2개의 보트로도 가능한 것이다. 정답처리된 본인의 두 번째 접근법은 무게가 가장 가벼운 사람과 가장 무거운 사람끼리 보트에 태우는 것이다. 단, 이 둘의 합이 무게 제한을 넘어갔을 경우에는 무거운 사.. 2020. 10. 4.
[그리디, 난이도 중] 프로그래머즈, 조이스틱 해결 방법 먼저 조이스틱의 상하 이동 횟수들을 모두 합산해놓고 좌우 이동 횟수만 추가로 더하는 방식이 간편하다. 알파벳의 개수가 총 26개라는 점을 잘 이용하면 상하 이동 횟수를 구하는 것은 간단하지만, 조이스틱의 좌우 이동 횟수를 구하는 것은 쉽지 않을 수 있다. 조이스틱의 최소 좌우 이동 횟수는 다음과 같이 2가지 경우로 나누어야 한다. 한쪽으로만 이동하는 경우(오른쪽, 왼쪽) 중간에 한 번 꺾는 경우(오른쪽->왼쪽, 왼쪽->오른쪽) 즉, 한 방향으로만 커서를 이동하는 경우 외에도 중간에 한 번 꺾어야 하는 경우도 고려해야 한다. 물론, 두 번 이상 꺾는 경우는 최소 좌우 이동 수가 될 수 없다. 예를 들어, "BABAAAAAAAAAABAB" 의 경우를 살펴보자. 오른쪽으로만 이동하는 경우에는 4번째.. 2020. 10. 1.
3줄컷! 초 간단 난수(Random) 생성기 이번 포스팅에서 소개할 것은 random_device 라는 난수 생성 방식이다. 헤더에 있는 random_device는 시드를 하드웨어의 리소스로 만든다. 하드웨어의 리소스라고 하면 노이즈, 마우스 움직임 등이 있다. 헤더파일 선언, 객체 선언, 출력 단 3줄만이 필요하다. 유의할 점이 있다면 출력 값은 int형의 범위를 초과할 수도 있다는 점이다. 아래 사진을 보면 28억이 출력되는 모습을 볼 수 있다. 그러나, 범위는 프로그래머가 %와 +/- 를 활용하여 쉽게 조절할 수 있다. #include #include using namespace std; int main() { random_device rd; cout 2020. 10. 1.
[그리디, 난이도 중] 프로그래머즈, 섬 연결하기 최소 비용으로 모든 노드를 연결할 때에 사용되는 대표적인 알고리즘 2개가 있다. 1. 크루스칼 알고리즘 먼저, 모든 간선들을 오름차 순으로 정렬 한다. 비용이 적은 간선부터 그 간선으로 인한 사이클의 발생 여부를 판단하여 사이클이 생기지 않는다면, 그 간선을 채택하는 알고리즘이다. 자세한 설명과 예시는 위키피디아를 참고하면 좋을 것이다. ko.wikipedia.org/wiki/%ED%81%AC%EB%9F%AC%EC%8A%A4%EC%BB%AC_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 크러스컬 알고리즘 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 과학에서, 크러스컬 알고리즘(영어: Kruskal’s algorithm)은 최소 비용 신장 부분 그래프를 .. 2020. 9. 30.
DFS/BFS 고득점 kit 풀이 완료, 후기 본인이 이전에 DFS/BFS에 대해 설명한 포스팅이 있다. 저 때는 설명에 필요한 그림을 손으로 직접 그렸는데... 얼마 안돼서 한계를 깨닫고 파포로 갈아탔다. kimcoder.tistory.com/15?category=879722 [BFS, 난이도 하] 백준 1260번 DFS와 BFS BFS, DFS 알고리즘의 기본 원리를 공부한 사람이라면 쉽게 풀 수 있을 만한 문제이다. BFS(너비우선탐색)는 자신의 노드 주변에 자신이 갈 수 있는 경로들부터 탐색하는 알고리즘으로, 방문하지 않� kimcoder.tistory.com 프로그래머즈에 와서 문자열 DFS/BFS 문제를 처음 접해보았는데 이런 문제들은 고민을 좀 하고 풀었다. 지금까지 노드에 번호가 매겨져 있는 문제만 풀었는데 특히 '여행 경로' 문제는 .. 2020. 9. 30.
[DFS, 난이도 중하] 프로그래머즈, 타겟 넘버 문제 설명에 쓰인 예제를 예로 들어 풀이 하겠다. □1□1□1□1□1 = 3에서 □에 +/- 를 넣어 3을 만들 수 있는 경우의 수를 계산하면 되는 문제이다. 이를 해결하기 위해서, 뒤에 있는 □일 수록 깊이가 커지는 DFS를 수행하면 된다. 예를 들면 탐색 순서는 +++++ ++++- +++-+ +++-- ++-++ ...... 이런 식인 것이다. DFS의 깊이가 numbers의 크기와 같아지면 리턴을 하되, 누적 값이 target과 같다면 리턴하기 전에 answer에 1을 더하고 target과 같지 않다면 그냥 리턴만 해버리면 된다. 테스트 케이스 8개 모두 통과 #include using namespace std; int answer; void dfs(int sum, int depth, vector.. 2020. 9. 29.
[BFS, 난이도 중하] 프로그래머즈, 네트워크 BFS를 돌며 연결된 간선은 모두 방문 처리를 해주고, 더 이상 방문할 노드가 없을 경우 중단 한다. 모든 컴퓨터를 탐색하면서, 아직 방문하지 않은 컴퓨터일 경우 BFS를 시작해주고, BFS를 새로 시작할 때마다 answer를 1씩 증가시키면 문제가 해결된다. 한번 BFS를 수행하면, BFS의 시작점 컴퓨터와 같은 네트워크안에 있는 모든 컴퓨터가 방문처리 되는 것이다. 즉, answer = BFS 수행 횟수 가 되는 것이다. 테스트 케이스 13개 모두 통과 #include #include using namespace std; bool visited[201]; vector a[201]; queue q; void bfs() { while(!q.empty()){ int x = q.front(); for(int.. 2020. 9. 29.
[DFS, 난이도 중] 프로그래머즈, 단어 변환 begin을 시작점으로 두고 words중에서 현재 단어와 알파벳 하나만 차이나는 단어로 변환해 나가며, 최소 몇 번째 변환만에 target이 되는가 계산하는 문제이다. target이 될 때 까지 연속으로 변환한다는 점에서 DFS문제라는 것을 알았다. 문자열 a,b가 알파벳 하나만 차이나는가 여부를 판단하기 위해 connect 함수를 만들었다. 먼저 connect 함수를 이용하여 begin과 words를 비교해나가며 참일 경우 간선을 설정한다. 다음에는 words단어끼리 간선을 설정한다. 그리고 편리를 위해 정점마다 번호를 매겨주었다. target은 정점 번호를 0으로 정했고, words의 i번째 단어의 정점 번호를 i+1로 매겼다. words에서 target이 있는 위치를 알기 위해 target_inde.. 2020. 9. 29.