[프로그래머스] 최소직사각형
잠이 안와서 간만에 하나 풀어봄 1. 문제설명 https://programmers.co.kr/learn/courses/30/lessons/86491 코딩테스트 연습 - 최소직사각형 [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133 programmers.co.kr 2. 접근방법 음 뭐 별 고민 없이 풀긴했다. 명함을 가로로 돌릴수 있다는 게 흥미로웠음 결국 그냥 배열안의 두수를 비교해서 큰거는 index: 0 에 다가 작은거는 index: 1 에다가 박아두고, for문으로 index: 0 에있는 애들중에 제일 큰애 index: 1 에 있는 애들 중에 제일 큰애 두개 구해서 곱해주..
2022. 2. 14.
[Javascript]크레인 인형뽑기 게임
https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 문제설명 게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. "죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 "1 x 1" 크기의 칸들로 이루어진 "N x N" 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격..
2022. 1. 4.
[Javascript] 폰켓몬
문제설명 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택 첫 ..
2022. 1. 4.
모의고사
문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작..
2021. 12. 28.
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.
아일랜드 (BFS)
https://kong-dev.tistory.com/58 아일랜드(DFS) 문제설명 [1, 1, 0, 0, 0, 1, 0], [0, 1, 1, 0, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 1, 1], [1, 1, 0, 1, 1, 0, 0], [1, 0, 0, 0, 1, 0, 0], [1, 0, 1, 0, 1, 0, 0], 1은 섬이고 0은 바다다. 섬은.. kong-dev.tistory.com 같은 문제다. 이번엔 BFS로 풀어야 한다. DFS로 하는건 못맞췄는데, BFS는 맞췄다. function solution(board) { let island = 0; const xmoving = [0, 1, 1, 1, 0, -1, -1, -1]; const ymov..
2021. 12. 5.
아일랜드(DFS)
문제설명 [1, 1, 0, 0, 0, 1, 0], [0, 1, 1, 0, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 1, 1], [1, 1, 0, 1, 1, 0, 0], [1, 0, 0, 0, 1, 0, 0], [1, 0, 1, 0, 1, 0, 0], 1은 섬이고 0은 바다다. 섬은 상하좌우 그리고 대각선으로도 연결 돼 있고 이어진 섬은 하나로 친다. 섬의 갯수를 구하라 접근방법 설명이 너무 대충인가. DFS를 이용해서 풀어야 한다. 우선 이중for 문을 이용해서 1을 찾는다. 1을 찾으면 카운트를 하고, DFS함수를 호출한다. DFS함수 내부는 1을 만난 지점을 0으로 바꾸고 팔방으로 1이 있는지 확인한다. 1이 발견되면 그곳으로 이동해서 반복 functio..
2021. 12. 5.
미로탐색
문제설명 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 0 0 0 1 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 0 0 0 0 0 0은 지나 갈 수 있는 통로. 1은 지나 갈 수 없는 벽. 0,0 부터 시작해서 7,7로 도착하는 경우의 수를 구하는 함수를 완성하세요. function solution(board) { return answer; } let arr = [ [0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 1, 0, 0, 0], [1, 1, 0, 1, 0, 1, 1], [1, 1, 0, 0, 0, 0, 1], [1, 1, 0, 1, 1, 0, 0], [1, 0, 0, 0, 0, 0, 0], ]..
2021. 12. 3.