본문 바로가기

Web development/Algorithm64

Python Basic Syntax arithmatic operators 1 + 3 >> 4 1 - 3 >> -2 1 / 3 >> 0.3333333 5 // 2 # quotator >> 2 5 % 2 # remainder >> 1 divmod(5, 2) # quotator and remainder at once >> (2, 1) division by 0 occurs ZeroDivisionError if if a % 2 === 0 or a > 10: print("") elif a > b and a // b > 1: # // is for get the quotient print() else: print() # tenary operator '짝수' if a % 2 == 0 else '홀수' for문 for x in family: print(x,.. 2023. 8. 22.
[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.
[프로그래머스] 카펫 (완전탐색/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.
[프로그래머스] 구명 보트 (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.
[프로그래머스] 직업군 추천하기 (javascript) 직업군별 선호 언어 문자열 배열(table)과, 내 언어 스택 배열(languages), 선호도(preference)를 입력받아 가장 적합한 직업군을 리턴하는 문제이다. 우선 직업군별 선호 언어 문자열 배열(table)이 별로 아름답지 못하게 입력되어 있기 때문에 갈무리가 필요하다. 추후 직업군별 점수 산출이 필요하기 때문에, 언어별로 어떤 직업군에 몇점인지로 정리했다. tables = ["SI JAVA JAVASCRIPT SQL PYTHON C#", "CONTENTS JAVASCRIPT JAVA PYTHON SQL C++", "HARDWARE C C++ PYTHON JAVA JAVASCRIPT", "PORTAL JAVA JAVASCRIPT PYTHON KOTLIN PHP", "GAME C++ C# JA.. 2021. 8. 23.