알고리즘/프로그래머스 알고리즘 공부(15)
-
[프로그래머스-Level 1] [JavaScript] 부족한 금액 계산하기
[문제] 한 놀이기구의 원래 이용료가 price원으로 가정할 때, 같은 놀이기구를 N번째 이용한다면 원래 price의 N배를 받습니다. 한 놀이기구를 주어진 입력 값 count번 탔다고 가정할 경우, 현재 얼마가 부족한지 계산하세요. (예시: price가 3, money가 20, count가 4일 때, 총 이용 금액은 3 (첫 번째 탑승) + 6 (두 번째 탑승) + 9 (세 번째 탑승) + 12 (네 번째 탑승) = 30이 되는데 현재 주어진 money가 20이므로 30 - 20 = 10이 됩니다.) [알고리즘] 반복문과 조건문을 사용하면 됩니다. [풀이] 카운트만큼 price * i 곱해주고 money에서 차감합니다. money가 0보다 크다면 부족하지 않기 때문에 0을 반환하며 money가 음수 즉..
2022.11.29 -
[프로그래머스-Level 1] [JavaScript] 과일 장수 - 배열, 최솟값 이용
[문제] 사과 상자를 포장한다고 가정합니다. 사과는 상태에 따라 1점-k점까지의 점수로 분류되며 최상품의 사과가 k점수이고 1점이 최하품의 사과입니다. 한 상자에 사과를 m개씩 담아서 포장하며 상자에 담긴 사과 중에 가장 낮은 점수가 1이상 k이하라면 한 상자의 가격은 p 곱하기 m입니다. 상자 단위로만 포장해서 판매되며 남는 사과 즉 나머지는 버립니다. k가 3, m이 4라고 가정했을 때 [1,2,3,1,2,3,1] 이렇게 7개의 사과 점수가 주어지는 경우 [2,3,2,3] 이렇게 사과 상자를 1개를 만들어 판매할 수 있습니다. 즉 최종 결과는 (최저 사과 점수 * 한 상자에 있는 사과 개수 * 상자 개수) = 8이 됩니다. (2 * 4 * 1) = 8 [알고리즘] 정렬, 배열, Math.min 사용하..
2022.11.28 -
[프로그래머스-Level 1] [JavaScript] 햄버거 만들기 - 스택(Stack) 활용
[문제] 햄버거를 빵-야채-고기-빵 순서로 포장을 합니다. 숫자 1-2-3-1로 표현했을 때, 이 조합 순서대로 햄버거를 포장한다고 가정하여 재료들이 주어졌을 때 총 몇 개의 햄버거를 포장할 수 있는지 계산하는 문제입니다. 예를 들어 [2, 1, 1, 2, 3, 1, 2, 3, 1]의 배열이 입력으로 주어졌을 때 포장되는 햄버거는 총 2개입니다. [알고리즘] 스택을 활용할 수 있습니다. (스택이 아닌 다른 방법으로도 당연히 해결 가능합니다) [풀이] 아래 주석에 설명을 해놓은 것을 참고하시면 되며 먼저 burgerStack이란 배열을 하나 선언해주고, 그 스택 배열에 ingredient 배열의 요소를 push로 넣어줍니다. 그 다음 Stack의 길이가 4 이상인 경우, 맨 뒤의 Stack의 요소들이 각각..
2022.11.27 -
[프로그래머스-Level 1] [JavaScript] 푸드 파이트 대회 - sort(정렬) 활용
[문제] food 배열이 주어집니다. 예를 들어 [1, 3, 4, 6] 라고 food 배열이 input으로 주어질 때, 첫 번째 인덱스 0은 마시는 물을 말하며 항상 값이 1이고 그 다음 인덱스 1은 3이 주어졌는데 첫 번째 인덱스의 음식 개수입니다. 2번째 인덱스는 4개, 3번째 인덱스는 6개가 되며, 왼쪽 선수와 오른쪽 선수가 서로 대결을 펼친다고 가정해서 물이 한 가운데 있는, 즉 물을 기준으로, 서로 대칭 형태로 음식을 배열하고자 합니다. 즉 이 예시에서는 "1223330333221"이 결과로 return 되어야 하는 것입니다. [알고리즘] 여러 알고리즘이 사용될 수 있으며 필자는 먼저 배열에 반복문을 활용하여 음식을 나열한 뒤에 0을 붙이고 이미 만든 배열을 역정렬(sort 함수 활용)하여 뒤에..
2022.11.24 -
[프로그래머스-Level 1] [JavaScript] 기사단원의 무기 - 약수의 개수 구하기
[문제] 기사단원의 수 numbers, 공격력의 제한 수치 limit, 제한 수치를 초과하는 경우에 제한되는 무기의 공격력을 나타내는 power가 존재합니다. 기사단원의 수가 3일 때, 기사단원1, 기사단원2, 기사단원3이 존재하며 각 기사단원의 약수 개수에 해당하는 공격력을 가진 무기를 구매해야 하며 제한 수치를 초과하는 경우, 제한되는 무기의 공격력이 됩니다. 이 모두를 더한 값을 구하는 것이 문제입니다. [알고리즘] 제곱근 및 반복문 사용 [풀이] 약수의 개수를 구하는 것이 핵심으로 일반 for 반복문을 사용하여 1부터 해당 숫자까지 하나씩 체크해서 구해주는 방법이 물론 가능하지만 시간 초과로 인해 통과하지 못하기 때문에, 이 경우 시간 복잡도를 줄이기 위해 Math.sqrt 제곱근 함수를 사용해서..
2022.11.23 -
[프로그래머스-Level 1] [JavaScript] 콜라 문제 - 재귀 함수 활용
[문제] 한 마트에서는 빈 병 a개를 가져다가 주면 콜라 b병을 줍니다. 이 때 빈 병 n개를 마트에 가져다주었을 때 콜라 몇 병을 받을 수 있는지 계산하세요. 빈 병이 a개 미만인 경우에 더 이상 콜라를 받을 수 없습니다. (예시: a가 3, b가 1, n이 20이라고 가정했을 때, 빈 병 3개를 가져다주면, 콜라 1병을 받습니다. 처음에는 빈 병 3개당 콜라 1개를 받을 수 있으므로 빈 병 18개를 가져다주면 콜라 6병을 받게 됩니다. 그리고 콜라 6병을 모두 마셨다고 가정합니다. 그러면 현재까지 남아 있는 콜라는 총 (2+6) = 8병이 되고 콜라 8병에서 이제 6병을 가져다주면 콜라 2병을 받게 됩니다. 이제 2+2 = 4병이 남게 되며 여기에서 3병을 가져다가 1병을 받으면 총 1+1 = 2병이..
2022.11.23