본문 바로가기
728x90
728x90

문제풀이/인프런 알고리즘 문제풀이6

4-5 k번째 큰수 문제설명 중복된 숫자가 있을수도 있는 N장의 카드에서 무작위로 3장을 뽑아 더한 모든 경우의 값을 구하고 그중에서 k번째로 큰 수를 구해라. 예를 들어 k 가 3이고, 3장을 더한 모든 경우의 값이 [10, 10, 11, 11, 12, 12, 13] 인 경우 k번째로 큰 수는 12 이다. const numList = [13, 15, 34, 23, 45, 65, 33, 11, 26, 42]; const k = 3; numList는 카드의 목록이다. 접근방법 4챕터 막문제라 엄청 어려울줄 알았는데 생각보다 쉽게 풀었다. 3중 for문 돌리면서, 중복되는 경우 제외 해주면서 싹다 더해준 뒤에 배열하나에 중복되는 값 거르면서 때려넣고, 내림차순 정리한다음에 k-1번 index의 값을 출력하면 된다. functi.. 2021. 12. 20.
4-4 졸업선물 문제설명 학생들에게 졸업선물을 해주기 위해 갖고 학생들에게 직접 갖고 싶은물건의 가격과 배송비를 알아오라고 했다. 선생님에겐 한정된 예산과, 물건값의 50%를 할인해주는 쿠폰이 있다. 단, 50% 할인 쿠폰은 물건값만 할인되고, 배송비는 할인 되지 않는다. 선생님의 한정된 예산으로 졸업선물을 사줄 수 있는 최대학생수를 구해라. const budget = 28; const arr = [ [6, 6], [2, 2], [4, 3], [4, 5], [10, 3], ]; budget 은 예산을 나타내고 학생수는 arr.length 이다. arr[n][0]은 물건의 가격을 arr[n][1]은 물건의 배송비를 나타낸다. 접근방법 30분동안 그림도 그리고 손코딩도 해보고 이거저거 다해봤는데 감이 안잡혀서, 결국 풀이 .. 2021. 12. 20.
4-3 멘토링 문제설명 n번의 테스틀 거쳐서, 멘토와 멘티를 정하려고 한다. 멘토는 모든 시험에서 멘티보다 등수가 높아야한다. n번의 테스트결과가 주어지면 멘토와 멘티가 정해지는 경우는 몇 가지 인지 출력해라. const arr = [ [3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2], ]; console.log(solution(arr)) 위의 경우에서 첫번째 테스트 결과는 3번학생이 1등, 4번학생이 2등, 1번학생이 3등, 2번학생이 4등이다. 접근방법 for문을 여러번 돌려야 겠다는 건 대충 직감적으로 왔다. 하나하나 다 비교를 하기 위해, 무려 4중 for문을 이용해 i번 학생과 j번 학생을 지정하고 i의 k번째 테스트의 등수(s)를 grade1 에 할당하고 j의 k번째 테스트의 등수(s.. 2021. 12. 20.
4-2 뒤집은 소수 숫자들이 담긴 배열이 입력되면 각 숫자들을 뒤집고, 뒤집은 숫자가 소수인지 확인한 후 소수이면 출력한다. 단 예를 들어 200 뒤집어서 002 가 되는 경우 2로 출력한다. const arr = [32, 55, 62, 20, 250, 370, 200, 30, 100]; console.log(solution(arr)); 예제를 보면 이해가 쉽다 32를 뒤집어서 23 23은 소수이므로 23 출력 이 예제가 입력되면 출력되는 수는 23, 2, 73, 2, 3 이다. function solution(arr) { const answer = []; for (const num of arr) { let cnt = 0; const changedNum = Number(num.toString().split('').rever.. 2021. 12. 14.
4-1 자릿수의 합 배열에 숫자들이 담겨서 입력되면, 숫자들의 각 자릿수를 더한 값이 가장 큰 값을 출력한다. 근데 자릿수를 더한 값이 같은 숫자의 경우는 배열에 담겨서 입력된 숫자가 큰 값이 출력된다. const arr = [128, 460, 603, 40, 521, 137, 123, 11261]; 예제없이 보면 문제가 조금 애매한거 같은데 예제를 보면 쉽다. 128의 자릿수의 합은 11 그다음은 10, 9 ,4,8,11,6,11 이다. 가장 큰 합이 11 인데 11이 3개다 이런 경우에는 128, 137, 11261을 비교해서 가장 큰 수를 출력한다. 그러니 출력되는 값은 11261이다. function solution(arr) { let answer = 0; const sums = []; let biggest = 0;.. 2021. 12. 14.
격자판 최대합 문제설명 N*N크기의 표가 숫자로 채워져있다. 각 행의 합 각 열의 합 좌상우하 대각선 합 우상좌하 대각선 합 중 가장 큰 합을 구하라. 10 13 10 12 15 12 30 30 23 11 11 25 50 53 15 19 27 29 37 27 19 13 30 13 19 접근방법 다행히 2차배열로 만들어서 입력해주더라.. 배열 부터 만들었으면 귀찮았을거 같다. 좋은 방법이 있을까 고민을 해봤는데, 그냥 각 행의 합, 각 열의 합, 대각선 합 두개 총 12개의 숫자 다 한 배열에 때려 넣고 Math.max 돌리면 되는 거 아닌가.. function getBiggestSum(arr) { //모든 합이 들어가는 배열 const sum = []; //가로열 합 for (let i = 0; i < arr.leng.. 2021. 12. 10.
728x90
728x90