반응형

IT/Algorithm 50

프로그래머스) 3진법 뒤집기

https://programmers.co.kr/learn/courses/30/lessons/68935 코딩테스트 연습 - 3진법 뒤집기 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수 programmers.co.kr 나의 풀이 toString으로 3진수 형 변환 -> split으로 배열로 만들기 -> reverse로 순서 뒤집기 한 후에, 이것을 parseInt의 문자열 입력 부분에 넣고 3진수를 10진법으로 표현하였다. function solution(n) { return parseInt(n.toString(3).split("..

IT/Algorithm 2021.10.18

프로그래머스) 부족한 금액 계산하기

https://programmers.co.kr/learn/courses/30/lessons/82612 코딩테스트 연습 - 1주차_부족한 금액 계산하기 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이 programmers.co.kr 나의 풀이 function solution(price, money, count) { let needMoney = 0; while (count) { needMoney += price * count; count -= 1; } return needMoney - money > 0 ? needMoney - money : 0 ; } coun..

IT/Algorithm 2021.10.15

프로그래머스) 예산

https://programmers.co.kr/learn/courses/30/lessons/12982 코딩테스트 연습 - 예산 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 programmers.co.kr 나의 풀이 시간 효율성을 고려해 for문을 사용하였다. 길이가 1인 배열 d를 고려해 조건문을 활용하여 early return 하였다. function solution(d, budget) { let answer; if (d.length === 1) { return answer = d[0] a - b); for (let i = 0; i < d.length; i++) ..

IT/Algorithm 2021.10.14

Bubble Sort, Insertion Sort 구현해보기

이번 글에서는 정렬 알고리즘 중에서 Bubble 정렬, Insertion 정렬에 대해서 알아보고 구현해보려고 한다. Bubble Sort 버블 정렬은 최악의 시나리오에서 가장 비효율적인 정렬 알고리즘이지만, 우리가 이해하기 가장 쉬운 방식이다. 버블 정렬은 배열을 반복하고 각 인덱스를 옆에 있는 인덱스와 비교한다. 그리고 서로 크기 비교를 하며 모든 값들이 순서에 맞게 위치할 때까지 루프를 반복한다. 인덱스를 스왑 하는지를 확인하는 내부 루프와 교체된 항목이 있는지 확인하는 외부 루프가 있다. 따라서 버블 정렬의 시간 복잡도는 O(n^2)이다. 버블 정렬을 아래 코드로 구현해보았다. function bubbleSort (nums) { let i = 0; while(i < nums.length) { num..

IT/Algorithm 2021.10.14

Queue에 대해서

Stack은 queue 없이 이야기할 수 없다. 큐는 First-In First-Out을 따른다. 큐는 대기열이며, 사람들이 줄을 서는 것과 비슷하다. 스택처럼 큐도 마찬가지로 대기열에서 빼낼 다음 요소가 무엇인지 엿볼 수 있다. 큐는 프린터기처럼 요청한 작업을 순서대로 처리한다. 하지만 Priority queues라는 것도 존재한다. 우선 순위우선순위 큐는 큐 안의 요소에도 우선순위를 할당한다. 따라서 우선 순위가 높은 항목이 먼저 큐에서 제거된다. 이것은 네트워킹에 유용하다. 일부 패킷은 다른 패킷보다 더 중요하기 때문이다. 비디오를 스트리밍하는 경우 나중에 패킷을 받으면 일부 프레임을 건너뛸 가능성이 높기 때문에 우선순위가 높다. 반면 Dropbox에 동기화하면 동기화를 계속하기 위해 네트워크 트래..

IT/Algorithm 2021.10.13

Stack 스택이란?

Stack 스택은 "Last-In First-Out"을 따르는 인터페이스이다. 스택(추가)에서는 푸시(제거) 또는 팝만 할 수 있다. 또한 마지막으로 푸쉬한 것은 곧 팝이 반환하는 것과 같다. 종종 스택을 수정하지 않고 스택의 최상위 값만 다루는 peek라고 부르는 메서드를 가지게 될 것이다. 다음 코드를 보자. function double(x) { return 2 * x; } function squareAndAddFive(y) { return square(y) + 5; } function square(z) { return z * z; } function maths(num) { var answer = double(num); answer = squareAndAddFive(answer); return ans..

IT/Algorithm 2021.10.13

프로그래머스) 복서 정렬하기

https://programmers.co.kr/learn/courses/30/lessons/85002 코딩테스트 연습 - 6주차_복서 정렬하기 복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요 programmers.co.kr 나의 풀이 function solution(weights, head2head) { const objList = []; const answer = []; head2head.forEach(function (strScore, strIndex) { let winMoreWeight = 0; let obj = {}; strSc..

IT/Algorithm 2021.10.13

프로그래머스) 상호 평가

https://programmers.co.kr/learn/courses/30/lessons/83201?language=javascript 코딩테스트 연습 - 2주차_상호평가 [[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD" [[70,49,90],[68,50,38],[73,31,100]] "CFD" programmers.co.kr 나의 풀이 이중 for 문에서 2차원 배열인 scores의 각 학생들에 대한 점수를 sum에 push 하였다. 조건으로 유일한 최고점 또는 최저점인 경우 splice로 제거하였다. 이후에 sum을 reduce 하고 sum의 길이로 나눔으로써 평균을 sumLi..

IT/Algorithm 2021.10.08

Quick Sort

Quick Sort 1960년에 제안되었으며 이후 많은 사람들이 수정 및 보완하여 완성된 정렬 알고리즘이다. 소개된 지 반 세기가 넘었지만 현존하는 가장 빠른 정렬 알고리즘 중에 하나이다. 퀵 정렬은 in place 방법과 in place가 아닌 방법 2가지가 있는데, 실제로 많이 쓰이는 방법은 메모리 사용량이 적은 in place 방법이다. 그러나 in place가 아닌 방법이 더 직관적으로 이해하기 쉬우므로 이 방법을 먼저 정리하고 그다음 in place 방법을 정리하겠다. Basic Quick Sort - Not In Place 퀵 정렬은 지난 Merge Sort에서 소개한 Divide and Conquer 전략을 사용한 알고리즘이다. 즉, 정렬하는데 가장 간단한 배열은 바로 요소가 없거나 하나만 ..

IT/Algorithm 2021.10.08

프로그래머스) [1차] 다트 게임

https://programmers.co.kr/learn/courses/30/lessons/17682?language=javascript 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 다트 게임의 계산 로직을 풀어보았다. *의 경우 자신과 뒤에 값에 2를 곱해주어야 해서 가장 나중에 계산하려고 했다. 따라서 S, D, T, #의 경우에 계산되는 값을 먼저 계산하였다. 이 과정에서 reduce를 사용하여 유일한 두 자리 숫자인 10은 이전 값과 현재 값을 문자열 더하기로 합쳐주었다. 그 후에 *을 찾고, 값을 계산하고 splice로 *을 없애주었다. 이 때문에 forEach가 아닌 for문을 사용하였다. 마지막으로 reduce로 누적 계산하여 답을 도출했다. 나의 풀이 functi..

IT/Algorithm 2021.10.06
반응형