목록js (166)
N
배열 순차 리스트 연관된 데이터를 연속적인 형태로 구성된 구조를 가진다. 배열에 포함된 원소는 순서대로 번호(index)가 붙으며, 0부터 시작한다. 고정된 크기를 가지며, 일반적으로는 동적으로 크기를 늘릴 수 없다.(C, C++..) 그러나 JS와 같은 스크립트 언어는 동적으로 크기가 증감된다. 원하는 원소의 번호(index)를 알고 있다면 O(1)로 원소를 찾을 수 있다. 원소를 삭제하면 해당 번호(index)에 빈 자리가 된다. 삭제 후 빈 자리를 채우기 위해 O(n)이 소요된다. 중간에 요소를 추가하기 위해서도 O(n)이 소요된다. 추가와 삭제가 반복되는 로직은 배열이 추천되지 않는다! 배열 생성 방법 4가지 const arr1 = []; const arr2 = [1, 2, 3, 4, 5]; co..
https://programmers.co.kr/learn/courses/30/lessons/49189?language=javascript 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 큐와 BFS를 이용한 문제 풀이. 우선 그래프를 그리기 위해 n + 1의 크기만큼 2차원 배열 graph를 선언. 노드의 방문 여부를 알기 위한 visited 배열을 선언. for문. 주어진 edge는 무방향 그래프이기 때문에 두 노드에 해당하는 번호를 각각 넣어줘야 한다. 큐 class를 만들어 bfs를 위한 큐를 만든다. 문제가 1부터 가장 먼 노드를 찾아야 하기 때문에 큐에 1을 넣어 시작(..
https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 해시를 이용한 문제 풀이. gSum 객체는 각 장르의 총 플레이 횟수를 담는다. gIndex 객체는 각 장르의 곡마다 플레이 횟수와 인덱스를 담는다. 우선 각 장르 별 총 플레이 횟수와 인덱스를 알아야 한다. for문을 통해 genres와 plays의 원소에 접근. 만약 gSum 객체에서 genre를 key로 가지고 있지 않다면(undefined) 0으로 초기..
https://programmers.co.kr/learn/courses/30/lessons/12909?language=javascript 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr function solution(s){ const stack = []; for(let i = 0; i < s.length; i++){ if(s[i] === "("){ stack.push(s[i]); } else{ if(stack[stack.length - 1] == "("){ sta..
문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 n번째 피보나치 수를 출력한다. DP를 이용한 피보나치 수 문제 풀이. n번째 피보나치 수는 (n - 1)번째 피보나치 수 +..
문제 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 N(0 ≤ N ≤ 12)가 주어진다. 출력 첫째 줄에 N!을 출력한다. 백준에서 JS로 풀어본 첫 문제. node.js로 푸는데 입력을 어떻게 받아야 할 지 몰라서 구글링으로 찾았다. 주로 사람들은 시간초과 때문에 fs를 쓴다고 하지만, 공지 사항에 올라온 바로는 fs가 문제가 있어서 지금은 readline으로 쓰길 권장하고 있다! ----- 입력으로 주어진 N은 0 ~ 12로 크지 않기 때문에 흔히 사용하는 재귀 함수로 풀었다. 만약 N이 커진다면 DP를 이용해야 할 것이다. 그러나 브론즈 문제이기 때문에 재귀로 풀 수 있다..! const readline = require("readlin..
https://programmers.co.kr/learn/courses/30/lessons/12985?language=cpp 코딩테스트 연습 - 예상 대진표 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N programmers.co.kr function solution(n,a,b) { let answer = 0; while(1){ a = parseInt((a / 2) + (a % 2)); b = parseInt((b / 2) + (b % 2)); answer++; if(a === b){ return answer; } } }
https://programmers.co.kr/learn/courses/30/lessons/12913 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟 programmers.co.kr DP 알고리즘 사용. land[i][j] 에 있는 값과 land[i - 1][k]에 있는 값을 더해서 가장 큰 점수만 answer에 저장한다. 단, j != k. 알기 쉽게 예제에 있는 land를 사용해서 설명하겠다. 1 2 3 5 5 6 7 8 4 3 2 1 1행이 아닌 2행부터 시작하여 가장 큰 값을 answer 배열에 저장한다. 그렇기 ..