본문 바로가기

분류 전체보기138

[Javascript] Bubble Sort, Selection Sort, Insertion Sort (버블/선택/삽입 정렬) 버블 정렬과 선택 정렬, 삽입 정렬은 은 가장 간단한 정렬방법들이다. 모두 O(N^2)의 시간복잡도를 갖는다. 버블 정렬 배열 처음부터 두 요소씩 선택하여 뒷 요소가 더 작으면 자리를 바꿔나가는 방식이다. function bubble(arr){ // 배열을 처음부터 두 요소씩 선택하여 뒷 요소가 더 작으면 자리를 바꿔나간다. // 다시 처음부터... n^2번 실행 const len = arr.length-1; let temp, i, j; for(i=0; i [1, 4, 2, 3] 2. 남은 요소들을 탐색하여 가장 작은 수를 찾아 두번째 요소와 자리를 바꾼다. [1, 4, 2, 3] => [1, 2, 4, 3] 3. 반복 function selection(arr) { // 배열을 처음부터 탐색하여 가장 작.. 2021. 9. 11.
JetBrains IDE 추천 플러그인 및 설치방법 (Intelij IDEA/WebStorm/RubyMine/PyCharm/...) Plugin 설치방법 상단 메뉴바의 Files>Settings>Plugins>원하는 플러그인 검색 후 Install 추천 플러그인 Rainbow Brackets (강력추천) 괄호 짝을 맞춰 같은 색으로 맞춰줍니다. vs code bracket pair colorizer 비슷한 제품 format on save & restart on save Plugin Save Actions 설치 저장시 Auto import, Reformat을 자동화해주는 플러그인 안내에 따라 IDE 재시작 Settings>Other Settings>Save Actions 이제 저장시 code formatting 및 import가 자동으로 됩니다. 또한 debugging mode로 서버가 켜져있는 경우 수정한 클래스가 reload됩니다... 2021. 9. 6.
[프로그래머스] 카펫 (완전탐색/javascript) 가운데는 노란색, 가장자리 한줄은 갈색인 카펫이 있다. 노란색 타일과 갈색 타일의 수가 주어졌을 때 카펫의 가로세로 길이를 리턴하는 문제다. 우선, 갈색 타일은 무조건 한 줄만 테두리쳐져 있으므로 결과는 [노랑타일의 너비+2, 노랑타일의 높이+2]가 될 것이다. 1. 주어진 yellow로 가능한 경우의 수를 구한다. 2. yellow로 가능한 형태 중, 주어진 brown과 일치하는 것을 찾는다. 3. 적합한 yellow 형태의 가로세로에 2씩 더한 값을 리턴한다. yellow = 12인 경우의 가능한 경우의 수를 보자. yellow 영역은 세로x가로가 [[1, 12], [2, 6], [3, 4]] 세 가지가 가능하다. ([4, 3], [6, 2], [12, 1]은 세로가 더 길게 되므로 조건에 맞지 않다.. 2021. 8. 26.
일곱 난쟁이 (완전탐색/javascript) 왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다. 아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다. 아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오. 1. 먼저 9명의 키의 총합을 구하고 2. 총합 - 100이 가짜 난쟁이들의 몸무게의 합이므로 3. 반복을 돌며 두 명을 뽑아 몸무게의 합이 가짜 난쟁이들의 몸무게의 합이 되는지 확인한다. 배열을 변경(요소 삭제)하는 경우 index가 변화하는 것에 주의한다. .. 2021. 8. 25.
[Javascript Cheet Sheet] Array객체, 반복문 for...in, for...of /** * for문은 도중에 아이템을 제거해버리면 제대로 돌지 않는다. */ const arr = [1, 2, 3, 4, 5]; for(let item of arr){ arr.shift(); console.log(arr); console.log(item); // 1 3 5 } /** * for of도 내부적으로는 for(let i = 0 ; i < arr.length ; i++) 이런식으로 동작하기 때문에, * 당연하게도 도중에 배열 아이템이 사라져버리면 배열 길이만큼 반복하지 않는다. * 이렇게 놓고 보면 당연한데도, 왜 내가 생각한 횟수만큼 돌지 않는지 고민했다. 멍청하게 헤매지 말자. * * 원본 배열을 복제한 배열로 작업을 하던가, * splice, pop, sh.. 2021. 8. 25.
[Javascript Cheet Sheet] 숫자 다루기 알고리즘 문제풀이에 많이 사용되는 것만 따로 정리함. 선언 축약 let a, b; // a = undefined, b = undefined let a, b = 1; // a = undefined, b = 1 let a = 1, b = 2; // a = 1, b = 2 let [a, b] = [1, 2]; // a = 1, b = 2 let [a, b] = [1]; // a = 1, b = undefined 세 수 중 최솟값을 구하는 방법 // 1. if문 사용 let min; if(a 2021. 8. 25.
[프로그래머스] 단속카메라 (javascript) 풀어보러 가기 : https://programmers.co.kr/learn/courses/30/lessons/42884 코딩테스트 연습 - 단속카메라 [[-20,15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 그리디는 많이 풀어보는 수밖에 없는 것 같다.. 나는 구현보다 아이디어를 떠올리기가 더 어려운 것 같다. function solution(routes) { var answer = 0; // 종료위치 기준으로 오름차순 정력 routes.sort((a,b) => a[1]-b[1]); // 카메라의 위치를 최솟값보다 작게 두고 시작한다. let cam = -300001; for(let i in routes){ // 차량의 진입점이 현재 카메라보다 뒤에 있.. 2021. 8. 24.
Google Task vs TickTick (일정관리, 지속 가능한 습관 만들기) 학생때부터 투두리스트 없이는 못사는 사람이었다. 과제며 행사며 온갖 약속과 일정들을 어떻게 다 기억한단 말인가? 물론 내가 멍청해서일수도 있겠지만... 이렇게 해서라도 일정을 절대 잊지 않으니 직장에서도, 주변 인간관계에서도 사람간에 신뢰를 쌓을 수 있었다. 친구들은 아무리 먼 약속이라도 내가 잊었을까 걱정하지 않는다. 직장에서는 팀의 비서가 된 기분이 들 때도 있다.(난 뿌듯하고 기분 좋았다!) "ㅇㅇ씨 우리 그거 언제였죠?"하고 일정을 체크하고 싶을땐 항상 내게 묻거나, 팀원이 "우리 다음주 수요일에 회식할까요?"하면 내가 "그날 오후에 우리팀 중요한 업무 있잖아요. 언제 끝날지 불확실한데, 6시까지 끝낼수 있을까요?" "아 그랬었지? 그럼 목요일에 합시다." 하는 등... 하지만 이런 다이어리를 쓰.. 2021. 8. 24.
[프로그래머스] 구명 보트 (javascript) 최대한 적은 수의 구명보트를 사용하여 사람들을 모두 구출하는 문제다. 최적의 방법이 존재하는 문제임을 눈치채기가 쉽지 않았다..ㅜㅜ 처음엔 limit이 100이면 40 태우고 60있나 찾고, 다음엔 60보다 작은 최댓값 찾아서 짝을 만들어주려 했다.. 훨씬 간단한 방법이 존재한다. 우선 내림차순으로 people을 정렬한다. [100 60 50 51 40 30] limit=100 이라면 1. 제일 무거운 사람(left)과 제일 가벼운 사람(right)의 무게를 더했을 때, limit보다 크다면, 제일 무거운 사람만 태울 수 있다. => 태웠으므로 left++ 2. 제일 무거운 사람과 제일 가벼운 사람의 무게를 더했을 때, limit보다 작다면, 둘 다 태울 수 있다. => 둘 다 태웠으므로 left++, .. 2021. 8. 23.