제코베 JS 100제

    제코베 JS 100제 / 56 / 객체의 함수 응용

    다음의 객체가 주어졌을 때 한국의 면적과 가장 비슷한 국가와 그 차이를 출력하세요. function solution(country_area) { // 한국의 면적 저장 const korea_area = country_area["korea"]; // 객체에서 한국에 대한 정보 삭제 delete country_area.korea; // [나라, 면적]을 배열로 저장 let area_entries = Object.entries(country_area); // 면적의 값만 배열로 저장 let areas = Object.values(country_area); for (let i = 0; i < areas.length; i++) { // 면적의 차이 구하기 areas[i] = Math.abs(areas[i] - k..

    제코베 JS 100제 / 55 / 하노이의 탑

    하노이의 탑은 프랑스 수학자 에두아르드가 처음으로 발표한 게임입니다. 하노이의 탑은 A, B, C 3개의 기둥과 기둥에 꽂을 수 있는 N개의 원판으로 이루어져 있습니다. 이 게임에서 다음의 규칙을 만족해야 합니다. 1. 처음에 모든 원판은 A 기둥에 꽂혀 있다. 2. 모든 원판의 지름은 다르다. 3. 이 원판은 세 개의 기둥 중 하나에 반드시 꽂혀야 한다. 4. 작은 원판 위에 큰 원판을 놓을 수 없다. 5. 한 번에 하나의 원판(가장 위에 있는 원판)만을 옮길 수 있다. 이 규칙을 만족하며 A 기둥에 있는 원반 N개를 모두 C 원반으로 옮기고 싶습니다. 모든 원반을 옮기기 위해 실행되어야 할 최소 원반 이동 횟수를 계산하는 프로그램을 완성해 주세요. const route = []; function ha..

    제코베 JS 100제 / 54 / 연속되는 수

    은주는 놀이공원 아르바이트를 하고 있다. 은주가 일하는 놀이공원에서는 현재 놀이공원 곳곳에 숨겨진 숫자 스탬프를 모아 오면 선물로 주는 이벤트를 하고 있다. 숫자 스탬프는 매일 그 수와 스탬프에 적힌 숫자가 바뀌지만 그 숫자는 항상 연속된다. 그런데 요즘 다른 날에 찍은 스탬프를 가지고 와 선물을 달라고 하는 손님이 늘었다. 스탬프에 적힌 숫자가 공백으로 구분되어 주어지면 이 숫자가 연속수인지 아닌지 "YES"와 "NO"로 판별하는 프로그램을 작성하시오 입력1 1 2 3 4 5 출력 1 YES 입력2 1 4 2 6 3 출력2 NO function isConsecutiveNumber(str) { let arr = str.split(" ").map(Number); for (let i = 1; i < arr...

    제코베 JS 100제 / 53 / 괄호 문자열

    괄호 문자열이란 괄호 기호인 '{', '}', '[', ']', '(', ')' 와 같은 것을 말한다. 그중 괄호의 모양이 바르게 구성된 문자열을 바른 문자열, 그렇지 않은 문자열을 바르지 않은 문자열이라 부르도록 하자. (())와 같은 문자열은 바른 문자열이지만 ()())와 같은 문자열은 바르지 않은 문자열이다. 입력으로 주어진 괄호 문자열이 바른 문자열인지 바르지 않은 문자열인지 "YES"와 "NO"로 구분된 문자열을 출력해보자. function isValidBracketString(str) { if (!str.length) return; // 빈 문자열일 경우 let left_bracket = [ ["(", 0], ["{", 0], ["[", 0], ]; let right_bracket = [ ["..

    제코베 JS 100제 / 52 / quick sort

    function quickSort(arr) { if (arr.length parseInt(n, 10)); console.log(quickSort(array)); 위의 코드에선 pivot을 배열의 가장 첫번째 값으로 잡았지만, 중간값으로 잡는게 좋다고 한다. quick sort는 정렬이 불필요한 배열이 들어와도 수행하게 되는데, 이 경우 최악의 경우로 O(n^2)의 시간 복잡도를 가지게 된다. 어떤 배열이 들어올지 미지수인 상태에서 quick sort를 구현하게 된다면, 그나마 최소나 최대값이 아닌 확률이 가장적은 중간값으로 pivot을 잡는것이다.

    제코베 JS 100제 / 51 / merge sort를 만들어보자

    병합정렬은(merge sort)은 대표적인 정렬 알고리즘 중 하나로 다음과 같이 동작한다. 1. 리스트의 길이가 0 또는 1이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는 2. 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 3. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 4. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. function mergeSort(arr) { if (arr.length parseInt(n, 10)); console.log(mergeSort(array)); 2022.08.18 - [ALGORITHM/정렬] - Algorithm / 정렬 / Merge Sort (합병 정렬) (따로 포스팅했던 Merge Sort의 동작 ..