728x90
반응형

알고리즘 19

프로그래머스 - Level 1. 둘만의 암호/ JavaScript (js)

문제설명 문제분석 문자열 암호 문제입니다. 문자열 s의 각 요소를 index만큼 뒤의 알파벳으로 치환하여 리턴하면 됩니다. 다만 이때 skip에 포함된 알파벳은 (index 만큼)에 포함되지 않습니다. 가벼운 마음으로 풀어보겠습니다. 문자열 s의 각 요소를 skip에 포함되지 않은 뒤의 알파벳 중 index 만큼 건너간 알파벳으로 치환한다. 이해하기 쉽게 코드작성하기 function solution(s, skip, index) { // 모든 알파벳 중 skip에 포함된 알파벳 제외 const remainAlphabet = "abcdefghijklmnopqrstuvwxyz".split("").filter(x => !skip.includes(x)); // 문자열 s의 각 요소를 남은 알파벳 중 index 만..

프로그래머스 - Level 2. 모음 사전 / JavaScript (js)

문제설명 문제분석 지금까지 업로드한 코테 문제는 전부 완전 탐색 카테고리에 포함되어 있습니다. 그래서 당연히 이 문제도 완전 탐색일거라 생각했는데... 왠걸요. 이 문제는 일반항을 구할 수 있으면 훨씬 간단하게 풀 수 있는 문제입니다. 먼저 이 문제는 제한 조건이 있고, 일련의 규칙을 갖는다는 게 어렴풋이 느껴집니다. 그럼 뭐 별 수 있나요. 머리로 하든 손으로 하든 규칙을 찾기 위한 노가다 시작입니다. 먼저 가장 작은 경우부터 확인합니다. 맨 마지막(5번째) 자리의 모음의 인덱스가 커지려면 카운트가 1씩 늘어납니다. 그 다음은 4번째 자리의 모음의 인덱스가 커지는 경우입니다. 가장 마지막 자리의 모음 인덱스가 전부 존재하는 경우는 5가지이고, 존재하지 않는 경우 1가지를 더해 총 6가지가 존재합니다. ..

도서 [추천 알고리즘의 과학]을 소개합니다.

추천 알고리즘의 과학 / 저자 박규하 네 제 책이 나왔습니다. 사실 책을 쓴다는 미명하에 블로그도 소홀히했었는데요. 작년 11월에 드디어 책이 출간되었습니다. 이 자리를 빌어 먼저 집필을 권해주신 로드북 임성춘 대표님께 감사의 말씀을 전합니다. 이 책에서는 추천 알고리즘의 기본 원리부터 우리 생활속에서 쉽게 접하지만 알쏭달쏭했던 추천 알고리즘을 설명하고 있어요. 쉽게 설명하려고 노력했고요, 이해하고나서 활용하는 방법도 작성해두었습니다. 예를 들어 인스타그램 인플루언서가 되기 위해 해야하는 활동이나, 유튜브 구독자 수를 늘리기 위한 활동같은 방법말이죠. 구매링크는 여기를 클릭하세요! 컴퓨터를 공부하는 학생이나 개발자뿐만 아니라, IT 산업을 이끌어가는 기획자, 마케터, 데이터 사이언티스트, 저널리스트 등 ..

Algorithm 2023.02.07

프로그래머스 - Level 1. 최소직사각형 / JavaScript (js)

문제설명 - 최소직사각형 문제분석 모든 명함에는 가로길이와 세로길이가 존재하며, 가로 또는 세로의 길이가 각각 가장 긴 명함의 변을 구해 가장 작은 지갑의 면적을 리턴하는 문제이다. 말이 조금 어려운 거 같아서 풀어보자면 다음과 같다. 모든 명함에는 가로길이와 세로길이가 있다. 일반적인 명한은 가로 길이가 더 길지만, 간혹 세로길이가 더 긴 명함도 존재한다. 세로길이가 더 긴 명함을 옆으로 돌려서(세로길이와 가로길이를 스왑해서) 보관할 수 있다. 위 모든 경우를 포함하는 동시에, 입력된 모든 크기의 명함을 보관할 수 있는 가장 작은 지갑을 만들어야 한다. 결과값은 명함의 가장 긴 가로길이 x 가장 긴 세로길이여야 한다. (이때 3번이 이미 적용된 상태여야 한다.) 문제를 단순화 했으니 이해하기 쉽게 코드..

20200925

어제, 오늘 계속해서 놀라움의 연속이 눈 앞에서 펼쳐지고 있다. 이런 때 일수록 겸손해져야 하고, 냉정하게 스스로를 되돌아 보아야 하는 시기라고 생각한다. 나는 무언가 설명하고자 할 때, 최대한 상대방의 입장에서 이해할 수 있는 어휘와 방식을 차용하는 편이다. 그러나 다른 사람의 사고 방식을 완전히 이해하는 건 있을 수 없다. 그러다보니 당연히 내가 생각한 방식이 특정 부분에 치우쳐 다른 사고방식을 가진 사람들의 이해를 해칠 때도 있다. 그 때는 그 사람들을 위해 또 설명하면 괜찮지 않을까? 적어도 말로 하는 강의는 이 방식이 아주 유효했다. 지난 10년동안 수많은 학생을 만났다. 입시 학원에서, 그룹 스터디로, 어떤 때에는 학교로 출강을 다니면서 학생들을 가르칠 때에나 그 학생들의 학부모님과 면담하거나..

Today I Learned 2020.09.25

[Algorithm] K-nearest neighbors algorithm: KNN 알고리즘

KNN 알고리즘은 추천 시스템의 기본이 되는 알고리즘이다. 우리는 한 번 쯤 이미 비슷한 경험을 해본 적이 있다. 넷플릭스나 와챠에서 나와 비슷한 성향을 가진 사람이 본 영상을 추천받기도 하고, 유튜브나 페이스북에서 친구들이 봤거나 좋아요, 댓글달기와 같이 참여한 게시물 또는 영상이 추천된다. 여기에 조미료처럼 머신러닝 한 스푼을 넣어주면 내가 봐 온 영화를 토대로 어떤 영화를 내가 좋아할 지 추천하는 것도 가능하고, 새로나온 영화에 대해서 내가 별점을 얼마나 줄 지 예측할 수도 있다. 하지만 머신러닝은 단순한 조미료가 아니므로 ( 참고로 한국 구글에서 머신러닝 부트캠프를 무료로 진행한다 ) 지금은 아 그렇구나~ 정도로만 하고 넘어가도록 하자. K-nearest neighbors algorithm ( K..

Algorithm 2020.09.20

[Algorithm] Dynamic Programming - 동적 프로그래밍

동적 프로그래밍은 말이 동적이지 쉽게 이해하자면 프로그램이 돌아갈 때 자체적으로 기억을 하게 하는 것이다. 모든 값을 검사할 때, 이전의 값 중 최적의 해를 저장해두었다가, 다음 값을 검사할 때 비교하는 방식이다. 아주 아주 간단한 동적 프로그래밍은 최댓값 혹은 최솟값을 찾는 문제이다. 숫자로만 이뤄진 배열을 입력받는 경우, 가장 작은 수를 이미 가지고 있는 최댓값을 구하는 함수 또는 가장 큰 수를 이미 가지고 있는 최솟값을 구하는 함수를 이용해 문제를 풀 수 있을 거다. const findMax = (arr) => { let max = -Infinity; for ( let value of arr ) { // value 는 arr[index] 와 같다 ( for...of 검색 ) if ( max < va..

Algorithm 2020.09.20

[Algorithm] N-Queens, N 퀸즈, N개의 여왕, N 여왕

DFS ( Depth-first search ) 의 꽃인 N queens 를 구현하였다. 물론 자의로 주어진 스켈레톤에 구현하였고, 타의로 내 레포지토리에 하나가 쌓이게 되었다. 우선 N queens를 구현하기에 앞서, BFS 와 DFS를 모른다면 이 링크를 통해 개념 정도는 숙지를 해두자. [Algorithm] BFS, DFS - 너비우선탐색, 깊이우선탐색 BFS와 DFS는 탐색에서 대조적으로 설명하는 대표적인 두가지 방법이다. BFS와 DFS의 중간 그 어딘가에는 Heuristic ( 휴리스틱 ) 함수를 사용한 A* search ( 에이스타 서치 ) 등이 존재한다. 오늘은 BFS와 DFS dev-gp.tistory.com Backtracking ( 백트래킹, 퇴각검색 ) 백트래킹은 한정 조건을 가지는..

Algorithm 2020.09.15

[Algorithm] Dijkstra's algorithm - 다익스트라 알고리즘

BFS는 가중치가 없는 균일 그래프에서 최단경로를 계산하는 반면, 다익스트라 알고리즘은 가중치가 있는 그래프에서 최단 거리를 계산하는 데 사용된다. 아래 그림은 균일 그래프이다. 1번 vertex에서 출발하여 4번 vertex에 도착하기까지의 최단경로는 A, B 둘 중의 하나이다. 그렇다면 가중치가 있는 경우는 어떨까? 아까의 A경로 혹은 B경로 모두 7이라는 가중치를 가진다. 그런데, 우리는 직관적으로 더 짧은 길이 있음을 알 수 있다. 아래 그림의 화살표를 따라 이동하면, 가중치 6만에 도착할 수 있다. 대체 가중치가 뭐길래? 쉽게 이해하자. 1번은 서울이고, 4번은 부산이다. 2번은 울산이고, 3번은 대전이다. 그래프의 간선에 표기된 가중치는, 현실 시간으로 30분이라고 가정하자. 서울에서 부산까지..

Algorithm 2020.09.15

[Algorithm] BFS, DFS - 너비우선탐색, 깊이우선탐색

BFS와 DFS는 탐색에서 대조적으로 설명하는 대표적인 두가지 방법이다. BFS와 DFS의 중간 그 어딘가에는 Heuristic ( 휴리스틱 ) 함수를 사용한 A* search ( 에이스타 서치 ) 등이 존재한다. 오늘은 BFS와 DFS에 대한 간략한 설명과, 트리구조에서 어떤 방식으로 접근하여 사용하는 지 이야기해보자. BFS ( Breadth-First Search, 너비 우선 탐색 ) BFS는 시작점에서 출발하여 종점에 도착할 때 까지 시작점으로부터 같은 거리에 있는 좌표 혹은 노드를 가장 먼저 탐색한다. 위 그림에서 왼쪽의 grid는 start로부터 end까지 도달하기 위해 BFS가 동작하는 모습을 단편적으로 보여준다. 마찬가지로 오른쪽의 트리에서 루트로부터 end에 도달할 때까지 거리가 가까운 ..

Algorithm 2020.09.13
728x90
반응형