728x90

분류 전체보기 186

[다이나믹 프로그래밍] LCS, LCSS 란? 그리면서 이해하기 - 2

https://prpn97.tistory.com/63 [다이나믹 프로그래밍] LCS, LCSS 란? 그리면서 이해하기 - 1 처음 문제를 접하며 도무지 이해가 안되서 정리해서 포스팅하며 되새기기 위해, 또한 나처럼 헤매고 있는 사람들이 있다면 답을 알기보다 과정들을 통해 이 알고리즘에 대해 이해하는데 도움이 prpn97.tistory.com 1편에 설명이 있으니 참고해도 좋을 것 같다. Longest Common Subsequence 바로 최장 공통 부분수열에 대해 알아보려 한다. 먼저 최장 공통 부분수열의 길이에 대해 배워보자. 이번에는 LCS[i-1][j-1] 이전에 확인해야 하는 것이 있다. 두 문자가 다르다면 LCS[i - 1][j]와 LCS[i][j - 1] 중에 큰값을 표시하고, 두 문자가 같..

[다이나믹 프로그래밍] LCS, LCSS 란? 그리면서 이해하기 - 1

처음 문제를 접하며 도무지 이해가 안되서 정리해서 포스팅하며 되새기기 위해, 또한 나처럼 헤매고 있는 사람들이 있다면 답을 알기보다 과정들을 통해 이 알고리즘에 대해 이해하는데 도움이 될까 싶어 하나하나 써내리려 한다. 구글링해보면, 많은 자료들이 있고, 함수로도 그림으로도 그려서 설명하는데, 바보인 나에겐 너무 어려워서, 초보의 시선에서 이해한대로 그려보려 한다. 먼저 LCS란 무엇인가. Longest Common Substring혹은, Subsequence 이다. 최장 공통 문자열 혹은 최장 공통 부분수열 이다. 문자열 ABCDEF / GBCDFE가 있다고 하자. 최장공통 문자열은 BCD / 최장 공통 부분수열은 BCDF, BCDE가 될 수 있다. 말 그대로 문자열을 비교해서 공통된 가장 긴 문자열 ..

[JavaScript] 자원에 맞게 글 출력하기

일정한 자원을 갖고 있는 특수한 컴퓨터로 글을 쓰려 한다. A-Z순서대로 65-90의 비용이 소모되고, 공백은 32의 비용이 소모된다. 컴퓨터의 자원과 보내려는 글이 다음과 같을 때 보낼 수 있는 글을 출력하시오. (단, 왼쪽 글자부터 순차적으로 전송한다.) let str = 'K O R E A' let count = 450 let abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ' let num = [] let result = [] let answer = '' for(let i = 65; i

[2018 E 기업 알고리즘 대회 | 그리디 문제풀이] 1이 될 때까지

어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 합니다. 단, 두번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있습니다. N에서 1을 뺍니다. N을 K로 나눕니다. 예를 들어 N이 17, K가 4라고 가정합시다. 이 때 1번의 과정을 한 번 수행하면 N은 16이 됩니다. 이후에 2번의 과정을 두번 수행하면 N은 1이 됩니다. 결과적으로 이 경우 전체 과정을 실행한 횟수는 3이 됩니다. 이는 N을 1로 만드는 최소 횟수입니다. N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성하세요. N(2

[2019 국가 교육기관 코딩 테스트 | 그리디 문제풀이] 큰 수의 법칙

첫 줄에는 숫자 3개가 주어진다. 각각 아래 배열의 크기, 주어진 수를 몇번 더할 것인지, 같은 수를 몇번 더할 수 있는지 주어진다. 이를 N,M,K라고 하자. 둘째 줄에는 N개의 숫자가 나열되어 있다. 같은 수를 K번을 초과하여 반복할 수 없다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다. 5 8 3 2 4 5 4 6 46 input = ['5 8 3','2 4 5 4 6'] let M = input[0].split(' ').map(Number)[1] //8 let K = input[0].split(' ').map(Number)[2] //3 let arr = input[1].split(' ').map(Number) let answer = 0; arr.sort((a,..

[프로그래머스 | JavaScript] 배열 조각하기

function solution(arr, query) { for (let i = 0; i < query.length; i++) { if (i % 2 === 0) { // 짝수 인덱스 처리 arr.splice(query[i] + 1); } else { // 홀수 인덱스 처리 arr.splice(0, query[i]); } } return arr; } 문제 설명 그대로, (query의) 짝수 인덱스에서는 query[i]를 제외하고 그 뒤의 요소를 제거한다. (query의) 홀수 인덱스에서는 query[i]를 제외하고 그 앞의 요소를 제거한다. splice()의 첫 번째 요소는 제거를 시작할 지점, 두 번째 요소는 지울 요소의 개수를 의미한다. 두 번째 요소를 쓰지 않으면 끝까지 제거한다. 짝수는 해당 값은 ..

[백준 | JavaScript] 15552 빠른 A+B

불과 몇달 전이지만 완전 처음 코딩에 입문했을 때, 백준에 있는 문제들이 어려워보이고 푸는게 멋있어보여서 ㅋ; 코테연습을 백준에서 먼저 시도했다. 그런데 백준에서는.. 자바스크립트는 답을 입력하기도 어려웠다. 그래서 초반 몇 문제 풀다가 답 입력하는 방식도 귀찮고 해서 프로그래머스로 옮겨갔다. 슬슬 1단계에 있는 쉬운 문제들은 끝나가서, 백준에서 막혔던 문제들이 떠올랐다. 이 문제는 문제 자체는 쉽지만, 결과가 시간초과로, 정답으로 나오지 않았다. 여태까지 풀기만 하면 장땡이라고 생각했지만, 성능과 효율에 대해 고민해보게 되었다.. 혹시 나와 같은 사람들이 있을까 하여 답과 시간초과 코드를 비교해보고자 한다. 먼저 나는 이렇게 풀었다. const fs = require("fs"); let input = ..

[알고리즘 공부] 배열 내 덧셈 근삿값 경우의 수

https://prpn97.tistory.com/55 [프로그래머스 | JavaScript] 예산 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 prpn97.tistory.com 문제를 풀다가, 반복문 안에 여러 내장함수를 넣으면 효율성이 떨어진다는 것을 고려하여 1차원적으로 문제를 다시 풀어보기로 했다. function solution(d, budget) { let count = 0, sum = 0; d.sort((a,b) => a - b); for(let i = 0; i budg..

[프로그래머스 | JavaScript] 예산

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요. function solution(d, bu..

728x90