본문 바로가기

알고리즘

(8)
우선순위 큐 올바른 dequeue 다음과 같이 enqueue와 dequeue메서드를 포함한 클래스가 있다. class PriorityQueue { constructor() { this.store = []; } enqueue(item) { this.store.push(item); } dequeue() { let start = 0; this.store.forEach((item, index) => { if (this.store[start][1] > this.store[index][1]) { // 가장 작은것을 찾음 start = index; } }); return this.store.splice(start, 1); } } 처음에는 아래의 코드 처럼 dequeue를 만들때 sort를 한다음 맨 처음의 값을 shift를 통해서 빼려고 했다. 하지..
c언어 포인터(연산) 지난 포스팅에 이어 포인터끼리의 연산에 대해서 알아본다. 포인터의 연산에서 헷갈리기 쉽고 중요한 3가지이다. 1. 포인터와 포인터를 더하는 것은 불가능하다. - 포인터라는 것이 주소 값을 저장하고 있는 변수이고 이 두 개를 더한다는 것은 제3의 주소 값을 만들어 내는 것을 의미한다. 의미가 없는 행위이기에 c언어 자체적으로 지원하지 않는다. 2. 포인터와 포인터를 빼는 것은 가능하다. - 포인터와 포인터를 빼는 것은 의미가 있다. 왜냐하면 포인터와 포인터를 빼는 행위는 두 주소 사이에 몇 개의 메모리 공간이 있는지 알아낼 수 있기 때문이다. 밑의 예제를 통해서 확인해 볼 수 있다. 3. 포인터와 정수 간의 연산은 가능하다. - 포인터는 10진수와의 연산이 가능하며 연산할 때마다 포인터 타입 크기만큼 이 ..
c언어 포인터 (C pointer) 개인적으로 js에 관심이 많이 있기에 알고리즘 풀이 언어를 node.js로 가져가고 있었다. 하지만 파이썬, 자바, c++로만 풀 수 있는 문제들도 프로그래머스에서 출제가 되곤 하는 것을 깨달았다. 그래서 틈틈이 c언어 공부를 시작하기로 했다. c++ 이 c언어를 기반으로 하고 있기에 들어가기 앞서 c언어에서 기본적으로 꼭 알아야 하는 핵심 개념들을 틈나는 대로 정리하고자 한다. c언어에서 포인터란 메모리의 주소값을 저장하는 변수이다. 다른 언어들에서는 직접 주소에 접근하는게 쉽지 않았는데 c언어는 메모리의 주소 값에 접근하기 매우 편리하다. 다음 2가지 연산자가 메모리의 주소 값 접근과 수정을 편리하게 해 준다. * 연산자 ex) int *p = 10 1) 포인터 변수의 선언에 사용 (위의 경우 포인터..
프로그래머스 탑 자바스크립트로 풀기 문제 설명 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다. 송신 탑..
[DFS] 프로그래머스 네트워크 Javascript 풀이 문제 설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 제한사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[..
코드그라운드 개구리 뛰기 1년전 쯤 풀었던 코드그라운드 개구리 뛰기 문제입니다. 지금도 코드그라운드 사이트가 있는지 모르겠습니다만 알고리즘을 공유하는 차원에서 포스팅합니다. 코드그라운드 사이트 특징 1. 내가 제출한 문제의 득점을 확인할 수 있다. 예를 들어 아래 코드의 경우에는 100점으로 통과하였지만 통과 전까지 20, 40 점의 득점을 거쳐서 완성된 코스이다. 어디에서 잘못되었는지는 알려주지 않지만 다시 코드를 검토해보면서 완벽을 만들어가는 재미가 있다. 2. 다른 사람들이 제출한 코드를 확인할 수 있다. - 실력향상을 위해서라면 미리 보지 않는 것을 추천한다. 3. 정답을 맞히면 포인 트까 쌓여서 랭킹을 확인할 수 있다. - 학교별 랭킹 순위가 제공된다. *** 아래는 내가 최근에 풀었던 코드 그라운드 spsc예선 문제 ..
[BFS] 백준 미로탐색 자바스크립트(Node.JS) 버전 자바스크립트(node.js)로 이루어진 알고리즘 풀이가 구글검색 결과에 거의 없는것 같습니다. 이 포스트가 자바스크립트로 알고리즘을 공부하시는 분들께 도움이 되면 좋겠습니다. BFS의 원리 BFS탐색기법에서는 큐(Queue)가 핵심입니다. 큐를 활용하여서 BFS를 구현할 수 있기 때문입니다. 큐가 BFS를 구현할 수 있는 원리는 선입선출(FIFO _ first in first out) 구조이기 때문입니다. 구체적으로 설명하자면, 한 노드와 연결되어 있는 자식 노드(하위레빌)가 일단 큐에 들어가게 되고 그 자식노드와 연결되어 있는 자식노드(하위레벨)는 큐의 맨 뒤로 들어가게 되는 것입니다. 그리하여 상위레벨의 탐색이 먼저 이루어지고 난 뒤 자식노드로의 접근이 이루어 지게 되는 것입니다. BFS는 어떻게 최..
[DFS] 프로그래머스 타켓넘버 자바스크립트로 풀기 자바스크립트로 해결한 풀이방법은 구글 검색에서 발견하지 못했습니다. 그래서 직접 자바스크립트 해설을 포스팅합니다. [문제] n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타깃 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개..