Algorithm & 자료구조

    [알고리즘 JS] 이진 검색 알고리즘 : Binary Search Algorithm

    [알고리즘 JS] 이진 검색 알고리즘 : Binary Search Algorithm

    유데미 쉽게 배우는 JavaScript 알고리즘 입문 강의의 내용을 정리한 글입니다. 검색 알고리즘이란? 검색 알고리즘이란 말 그대로 주어진 데이터 내에서 특정 데이터를 검색하여 찾아내는 알고리즘이다. 순차 검색 알고리즘, 이진 검색 알고리즘, 해쉬 탐색 알고리즘 등 종류가 많다. 검색 알고리즘이라고도 하고 탐색 알고리즘이라는 이름을 쓰기도 하는데, 강의에서 검색이라는 용어를 사용하셨기 때문에 나도 검색 알고리즘이라고 표기하겠다! 이진 검색 알고리즘이란? Divide and Conquer : "분할과 정복" 방식이라고 할 수 있는데, 정리하면 두 부분씩 쪼개어 범위를 좁혀가며 검색한다는 의미이다. 정렬되어 있는 데이터를 먼저 절반으로 나눈뒤, 절반에 위치한 데이터(mid 데이터)와 타겟 데이터를 비교한다..

    [알고리즘 JS] 선택 정렬 알고리즘 : Selection Sort Algorithm

    [알고리즘 JS] 선택 정렬 알고리즘 : Selection Sort Algorithm

    유데미 쉽게 배우는 JavaScript 알고리즘 입문 강의의 내용을 정리한 글입니다. 정렬 알고리즘이란? 일단 정렬 알고리즘이란, 말그대로 주어진 범위 내의 불규칙적으로 나열된 데이터들의 순서를 일정 기준으로 정렬해주는 알고리즘이다. 정렬 알고리즘에는 여러 종류가 있는데, 크게 선택 정렬, 버블 정렬, 퀵 정렬, 삽입 정렬, 병합 정렬 등이 있다. 그 중 가장 첫 번째로 다룰 선택 정렬 알고리즘은, 다른 정렬 알고리즘을 배우기 전에 간단하게 정렬 알고리즘을 경험해 볼 수 있는 알고리즘인 것 같다. (다른 정렬 알고리즘은 아직 몰라서...) 선택 정렬 알고리즘이란? 말 그대로 데이터 하나를 선택해서 해당 데이터를 기준으로 작거나(오름차순), 큰(내림차순) 데이터가 있는지 비교해 선택된 데이터와 계속해서 자..

    [알고리즘 JS] 프로그래머스 LV.1 소수 찾기

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/12921?language=javascript 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 1 function solution1(n) { // 입력 : 2 이상 자연수 n // 출력 : 1과 n 사이의 소수의 갯수 let cnt = 0; for (let i = 1; i

    [알고리즘 JS]백준 17478번: 재귀함수가 뭔가요?

    문제 https://www.acmicpc.net/problem/17478 17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net 풀이 const readFileSyncAddress = '/dev/stdin'; const fs = require('fs'); let n = fs.readFileSync(readFileSyncAddress).toString(); n = Number(n); // 문장 앞에 들어갈 언더바 변수 let underbar = ''; const solution = function (n) { // 업데..

    [알고리즘 JS]프로그래머스 Lv.1 신고 결과 받기

    문제 https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 풀이 // 입력값 const id_list = ['muzi', 'frodo', 'apeach', 'neo']; const report = [ 'muzi frodo', 'apeach frodo', 'frodo neo', 'muzi neo', 'apeach muzi', ]; const k = 2; // 풀이 function solution(id_list..

    [알고리즘]백준 2581번: 소수 W_node.js

    문제 https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 풀이 const readFileSyncAddress = '/dev/stdin'; const fs = require('fs'); let [m, n] = fs .readFileSync(readFileSyncAddress) .toString() .trim() .replaceAll(/\r/g, '') .split(/\n/g) .map((v) => +v); const isPrime = function (x) {..

    [알고리즘]백준 1978번: 소수 찾기 W_node.js

    문제 const readFileSyncAddress = '/dev/stdin'; const fs = require('fs'); let [t, testcases] = fs .readFileSync(readFileSyncAddress) .toString() .trim() .replaceAll(/\r/g, '') .split(/\n/g); const isPrime = function (n) { // n이 1이면 소수가 아니므로 false if (n === 1 || n < 0) return false; // 2부터 시작해 제곱근까지 나누어 떨어지는 수가 있으면 소수가 아니므로 false for (let i = 2; i +v); let cnt = 0; for (let x of arr) { if (isPrime(x..

    [알고리즘]백준 10757번: 큰 수 A+B W_node.js

    문제 https://www.acmicpc.net/problem/10757 10757번: 큰 수 A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 풀이 const readFileSyncAddress = '/dev/stdin'; const fs = require('fs'); let [a, b] = fs .readFileSync(readFileSyncAddress) .toString() .trim() .split(/\s/g); const solution = function (a, b) { return (BigInt(a) + BigInt(b)).toString(); }; console.log(solution(a, b)); 자바스크립트 내장객체 Big..

    [알고리즘]백준 2839번: 설탕 배달 W_node.js

    문제 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 풀이 const readFileSyncAddress = '/dev/stdin'; const fs = require('fs'); let [input] = fs .readFileSync(readFileSyncAddress) .toString() .trim() .replaceAll(/\r/g, '') .split(/\n/g) .map((v) => +v); const solution = function (n) { let x = 1; let y = 1; while (5 * y..

    [알고리즘]백준 10250번: ACM 호텔 W_node.js

    문제 10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 풀이 const readFileSyncAddress = '/dev/stdin'; const fs = require('fs'); let [T, ...testCases] = fs .readFileSync(readFileSyncAddress) .toString() .trim() .replaceAll(/\r/g, '') .split(/\n/g); T = Number(T); const solution = function (T, testCases) { fo..