전체 글 20

[알고리즘] 최소 공배수 javascript

//---- 세팅 ----// const fs = require('fs'); const stdin = ( process.platform === 'linux' ? fs.readFileSync('/dev/stdin').toString() : `\ 3 1 45000 6 10 13 17 ` ).split('\n'); const input = (() => { let line = 0; return () => stdin[line++]; })(); //---- 풀이 -----// // 최대공약수는 두 수 A와 B의 공통된 약수 중에 가장 큰 정수이다. // 최대공약수를 구하는 가장 쉬운 방법은 2부터 min(A, B)까지 모든 정수로 나누어보는 방법이다. // ..

카테고리 없음 2022.03.15

[알고리즘] 최소 힙 javascript

힙(heap) 개념 일종의 트리로 수의 집합에서 가장 작은 수 혹은 가장 큰 수를 자주 꺼내올때 유용한 자료구조다. {1, 2, 3, 4, 5}의 정수형 배열이 있다고 가정한다면 제일 큰 수를 구하기 위해 for문을 사용한다. 배열 하나하나 비교하며 가장 큰 값을 구하려면 마지막까지 가야하므로 시간복잡도에서 O(n)이 된다. 힙 트리를 사용한다면 보다 빠르게 처리할 수 있다. 힙의 시간복잡도 삽입: O(logN) 삭제: O(logN) 완전 이진트리는 왼쪽부터 채워진다. 위 사진에서 8을 넣으려면 4의 자식요소로 추가 된다. 이것을 배열의 형태를 인덱스로 보자 왼쪽 자식은 부모의 인덱스 * 2 오른쪽 자식은 부모의 인덱스 * 2 + 1 leftChild = parent*2 rightChild = paren..

카테고리 없음 2022.03.12

[알고리즘] 회전하는 큐 javascript

참 ... 갈수록 내 머리로 풀수 있는 문제인가 싶다. 자료구조 중 큐는 선입선출의 구조를 가지고 있다. 비유하자면 은행 번호표 같은느낌 (1) Enqueue : 큐 맨 뒤에 어떠한 요소를 추가, 마지막으로 온 손님에게 번호표 발부 (2) Dequeue : 큐 맨 앞쪽의 요소를 삭제, 창구에서 서비스를 받은 손님의 번호표를 대기목록에서 삭제 (3) Peek : front에 위치한 데이터를 읽음, 다음 서비스를 받을 손님이 누구인지 확인 (4**) front** : 큐의 맨 앞의 위치(인덱스), 다음 서비스를 받을 손님의 번호 (5**) rear** : 큐의 맨 뒤의 위치(인덱스), 마지막에 온 손님의 번호 const [n, m, ...arr] = require("fs").readFileSync("/dev..

카테고리 없음 2022.03.10

[알고리즘] 스택 javascript

https://www.acmicpc.net/problem/10828 스택(Stack)의 개념 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out) 형식의 자료 구조 스택(Stack)의 연산 스택(Stack)는 LIFO(Last In First Out) 를 따른다. 즉, 가장 최근에 스택에 추가한 항목이 가장 먼저 제거될 항목이다. pop(): 스택에서 가장 위에 있는 항목을 제거한다. push(item): item 하나를 스택의 가장 윗 부분에 추가한다. peek(): 스택의 가장 위에 있는 항목을 반환한다. isEmpty(): 스택이 비어 있을 때에 true를 반환한다. 출저 - https://gmlwjd9405.github.io/2018/08/03/data-structu..

카테고리 없음 2022.03.07

[알고리즘] 설탕배달 javascript

조건 확인 필수* 설탕봉지는 5kg 3kg짜리만 있다. N(kg)를 5와 3으로 % 했을때 0이 되야 카운트가 늘어나는 생각을 할 수 있다. while는 참이면 무한 루프를 돌기때문에 break를 써야한다. let input = require('fs').readFileSync('/dev/stdin'); let count = 0; while (true) { if (input % 5 === 0) { console.log(input / 5 + count); break; } if (0 > input) { console.log(-1); break; } count++; input -= 3; } 가장 적은 갯수를 구해야 하니 큰 수인 5(kg)를 나누며 시작한다. 인풋이 18이면 5로 나누어 떨어지지 않으니 fals..

카테고리 없음 2022.02.03

[알고리즘] 124 나라의 숫자 javascript

일단 위의 표 패턴을 살펴보자 10진법으로 1 ~ 10일때 124 나라 숫자는 1, 2, 4, 11, 12, 14, 21, 22, 24, 오로지 124만 사용하는 것을 알 수 있다. 나는 이것만 캐치했는데 당장 풀이부터 어떻게 설정해야 할지 막혀 구글링을 하는 도중 다른분들의 캐치는 나와 상당히 달랐다. 나는 멍청하다 고수님 "나머지가 0 일 때 4가 붙고 1일 때 1, 2일때 2가 붙는 것을 규칙성으로 알 수 있다. 몫이 문제인데 3의 배수가 예외를 만든다. 3의 몫이 1인데 0인 그룹에 넣고 싶고 6의 몫이 2인데 1인 그룹에 들어가야 규칙에 맞다. 1 3의 수의 경우 몫이 0이고 4 6은 몫이 1, 7~9는 몫이 2으로 만들고 싶다. 그렇게 하려면 각 수에서 1을 빼고 나눠주면 된다. n/3 - 1..

카테고리 없음 2022.01.28

[알고리즘] 시저암호 javascript javascript

문제 설명 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요. 제한 조건 공백은 아무리 밀어도 공백입니다. s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다. s의 길이는 8000이하입니다. n은 1 이상, 25이하인 자연수입니다. 입출력 보면 문제는 쉽다. 알파벳이 있다면 s의 값들을 n번만큼 오른쪽으로 이동하면 답이 나오는 문제 for와 if문 쓰면 끝나겠구나 생각했지만 끝난건 나다. 생각하며 코드를 작성해보아..

카테고리 없음 2022.01.24