Repository: DEEPDIVE-coding-potatoes/Algorithm
Pull request #61: Test: 2025-03-25 알고리즘 풀이
Author: login: ksy21019
Created: 2025-03-25T07:28:47Z | Merged: 2025-03-25T08:08:04Z

## 📆 공부 일자

> 20250325

## 📝 공부 내용

> 난이도 하: [같은 숫자는 싫어 - 78%]
난이도 하: [이상한 문자 만들기 - 76%]
난이도 중: [과일 장수 - 64%]
난이도 상: [개인정보 수집 유효기간 - 48%]

> 난이도 하: [약수의 개수와 덧셈-84%]
난이도 하: [삼총사 - 77%]
난이도 중: [다트 게임 - 60%]

### 스크린샷 (선택)

## 💬 리뷰 요구사항(선택)

> 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요
>
> 난이도 상: [유연근무제 - 47%] 문제는 아직 완벽히 풀지 못하였습니다 ;-; 꽤 걸리네요..


Diff:
diff --git "a/\352\266\214\354\210\230\354\230\201/0324/12906_\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264.js" "b/\352\266\214\354\210\230\354\230\201/0324/12906_\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264.js"
new file mode 100644
index 0000000..d113b1d
--- /dev/null
+++ "b/\352\266\214\354\210\230\354\230\201/0324/12906_\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264.js"	
@@ -0,0 +1,30 @@
+/**
+ * 문제 설명
+ * 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
+ * 
+ * arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
+ * arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
+ * 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
+ * 
+ * 제한사항
+ * 배열 arr의 크기 : 1,000,000 이하의 자연수
+ * 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
+ */
+
+function solution(arr) {
+  const stack = []
+  for (const num of arr) {
+    if (stack.length === 0 || stack[stack.length - 1] !== num) {
+      stack.push(num);
+    }
+  }
+  return stack;
+}
+
+/**
+ * 다른 풀이
+function solution(arr)
+{
+    return arr.filter((val,index) => val != arr[index+1]);
+}
+ */
\ No newline at end of file
diff --git "a/\352\266\214\354\210\230\354\230\201/0324/12930_\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260.js" "b/\352\266\214\354\210\230\354\230\201/0324/12930_\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260.js"
new file mode 100644
index 0000000..5009405
--- /dev/null
+++ "b/\352\266\214\354\210\230\354\230\201/0324/12930_\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260.js"	
@@ -0,0 +1,33 @@
+/**
+ * 문제 설명
+ * 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
+ * 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
+ * 
+ * 제한 사항
+ * 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
+ * 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
+ */
+
+function solution(s) {
+  let answer = '';
+  let words = s.split(' ');
+  
+  for(let i = 0; i < words.length; i++) {
+      for(let j = 0; j < words[i].length; j++) {
+          if(j % 2 === 0) {
+              answer += words[i][j].toUpperCase();
+          } else {
+              answer += words[i][j].toLowerCase();
+          }
+      }
+      if(i < words.length - 1) answer += ' ';
+  }
+  return answer;
+}
+
+/**
+ * 다른 풀이 (정규식 사용)
+function toWeirdCase(s){
+  return s.toUpperCase().replace(/(\w)(\w)/g, function(a){return a[0].toUpperCase()+a[1].toLowerCase();})
+}
+ */
\ No newline at end of file
diff --git "a/\352\266\214\354\210\230\354\230\201/0324/135808_\352\263\274\354\235\274 \354\236\245\354\210\230.js" "b/\352\266\214\354\210\230\354\230\201/0324/135808_\352\263\274\354\235\274 \354\236\245\354\210\230.js"
new file mode 100644
index 0000000..e51cd81
--- /dev/null
+++ "b/\352\266\214\354\210\230\354\230\201/0324/135808_\352\263\274\354\235\274 \354\236\245\354\210\230.js"	
@@ -0,0 +1,47 @@
+/**
+ * 문제 설명
+ * 과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.
+ * 
+ * 한 상자에 사과를 m개씩 담아 포장합니다.
+ * 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.
+ * 과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)
+ * 
+ * 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
+ * 
+ * (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
+ * 사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.
+ * 
+ * 제한사항
+ * 3 ≤ k ≤ 9
+ * 3 ≤ m ≤ 10
+ * 7 ≤ score의 길이 ≤ 1,000,000
+ * 1 ≤ score[i] ≤ k
+ * 이익이 발생하지 않는 경우에는 0을 return 해주세요.
+ */
+
+function solution(k, m, score) {
+  let max = 0;
+  score.sort((a, b) => b - a);
+
+  const count = parseInt(score.length / m);
+
+  for (let i = m - 1; i < m * count; i += m) {
+    max += score[i] * m;
+  }
+  return max;
+}
+
+/**
+ * 다른 풀이 (1)
+function solution(k, m, score) {
+    let answer = 0;
+    const sortedScore = score.slice().sort((a, b) => a - b).slice(score.length % m);
+    for (let i = 0; i < sortedScore.length; i += m) {
+        answer += sortedScore[i] * m;
+    }
+    return answer;
+}
+
+ * 다른 풀이 (2)
+solution = (_, m, s) => s.sort().filter((_, i) => !((s.length - i) % m)).reduce((a, v) => a + v, 0) * m
+ */
\ No newline at end of file
diff --git "a/\352\266\214\354\210\230\354\230\201/0324/150370_\352\260\234\354\235\270\354\240\225\353\263\264 \354\210\230\354\247\221 \354\234\240\355\232\250\352\270\260\352\260\204.js" "b/\352\266\214\354\210\230\354\230\201/0324/150370_\352\260\234\354\235\270\354\240\225\353\263\264 \354\210\230\354\247\221 \354\234\240\355\232\250\352\270\260\352\260\204.js"
new file mode 100644
index 0000000..8a6fe98
--- /dev/null
+++ "b/\352\266\214\354\210\230\354\230\201/0324/150370_\352\260\234\354\235\270\354\240\225\353\263\264 \354\210\230\354\247\221 \354\234\240\355\232\250\352\270\260\352\260\204.js"	
@@ -0,0 +1,19 @@
+// 찾아보면서 풂..
+function solution(today, terms, privacies) {
+  const termPeriodMap = terms.reduce((acc, term) => {
+      const [termName, period] = term.split(' ');
+      acc[termName] = Number(period);
+      return acc;
+  }, {});
+  
+  const isExpired = (privacy) => {
+      const [date, term] = privacy.split(' ');
+      const termPeriod = termPeriodMap[term];
+      const expirationDate = new Date(date);
+      return new Date(today) >= expirationDate.setMonth(expirationDate.getMonth() + termPeriod);
+  };
+  
+  return privacies
+      .map((privacy, i) => isExpired(privacy) ? i + 1 : false)
+      .filter(Boolean);
+}
\ No newline at end of file
diff --git "a/\352\266\214\354\210\230\354\230\201/0325/131705_\354\202\274\354\264\235\354\202\254.js" "b/\352\266\214\354\210\230\354\230\201/0325/131705_\354\202\274\354\264\235\354\202\254.js"
new file mode 100644
index 0000000..ebd3ae9
--- /dev/null
+++ "b/\352\266\214\354\210\230\354\230\201/0325/131705_\354\202\274\354\264\235\354\202\254.js"
@@ -0,0 +1,48 @@
+/**
+ * 문제 설명
+ * 한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다.
+ * 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다.
+ * 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다.
+ * 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다.
+ * 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
+ * 
+ * 한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때,
+ * 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.
+ * 
+ * 제한사항
+ * 3 ≤ number의 길이 ≤ 13
+ * -1,000 ≤ number의 각 원소 ≤ 1,000
+ * 서로 다른 학생의 정수 번호가 같을 수 있습니다.
+ */
+
+function solution(number) {
+  let answer = 0;
+  for (let i = 0; i < number.length; i++) {
+    for (let j = i + 1; j < number.length; j++) {
+      for (let k = j + 1; k < number.length; k++) {
+        if (number[i] + number[j] + number[k] === 0) answer++;
+      }
+    }
+  }
+  return answer;
+}
+
+/**
+ * 다른 풀이 (combination() 사용)
+function solution(number) {
+    let result = 0;
+
+    const combination = (current, start) => {
+        if (current.length === 3) {
+            result += current.reduce((acc, cur) => acc + cur, 0) === 0 ? 1 : 0;
+            return;
+        }
+
+        for (let i = start; i < number.length; i++) {
+            combination([...current, number[i]], i + 1);
+        }
+    }
+    combination([], 0);
+    return result;
+}
+ */
\ No newline at end of file
diff --git "a/\352\266\214\354\210\230\354\230\201/0325/17682_\353\213\244\355\212\270 \352\262\214\354\236\204.js" "b/\352\266\214\354\210\230\354\230\201/0325/17682_\353\213\244\355\212\270 \352\262\214\354\236\204.js"
new file mode 100644
index 0000000..a75412b
--- /dev/null
+++ "b/\352\266\214\354\210\230\354\230\201/0325/17682_\353\213\244\355\212\270 \352\262\214\354\236\204.js"	
@@ -0,0 +1,34 @@
+/**
+ * 카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
+갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
+
+다트 게임은 총 3번의 기회로 구성된다.
+각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.
+점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으로 계산된다.
+옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.
+스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고)
+스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고)
+스타상(*)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)
+Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.
+스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.
+0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
+ */
+
+// 찾아보며 풂..
+function solution(dartResult) {
+  const bonus = { 'S': 1, 'D': 2, 'T': 3 },
+        options = { '*': 2, '#': -1, undefined: 1 };
+
+  let darts = dartResult.match(/\d.?\D/g);
+
+  for (let i = 0; i < darts.length; i++) {
+      let split = darts[i].match(/(^\d{1,})(S|D|T)(\*|#)?/),
+          score = Math.pow(split[1], bonus[split[2]]) * options[split[3]];
+
+      if (split[3] === '*' && darts[i - 1]) darts[i - 1] *= options['*'];
+
+      darts[i] = score;
+  }
+
+  return darts.reduce((a, b) => a + b);
+}
\ No newline at end of file
diff --git "a/\352\266\214\354\210\230\354\230\201/0325/77884_\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210.js" "b/\352\266\214\354\210\230\354\230\201/0325/77884_\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210.js"
new file mode 100644
index 0000000..11bb188
--- /dev/null
+++ "b/\352\266\214\354\210\230\354\230\201/0325/77884_\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210.js"	
@@ -0,0 +1,35 @@
+/**
+ * 문제 설명
+ * 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
+ * 
+ * 제한사항
+ * 1 ≤ left ≤ right ≤ 1,000
+ */
+
+function solution(left, right) {
+  let answer = 0;
+  for (let i = left; i <= right; i++) {
+    let count = 0;
+    for (let j = 1; j <= i; j++) {
+      if (i % j === 0) count++;
+    }
+    if (count % 2) answer -= i;
+    else answer += i;
+  }
+  return answer;
+}
+
+/**
+ * 다른 풀이 (제곱근 사용)
+function solution(left, right) {
+    var answer = 0;
+    for (let i = left; i <= right; i++) {
+        if (Number.isInteger(Math.sqrt(i))) {
+            answer -= i;
+        } else {
+            answer += i;
+        }
+    }
+    return answer;
+}
+ */
\ No newline at end of file


Reviews:
user: login: soyeon0116
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-25T07:47:50Z
user: login: SinYusi
body: 코드 깔끔한데요. 오늘도 고생하셨습니다
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-25T07:54:45Z
user: login: gaeunchoi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-25T07:58:27Z
user: login: SinYusi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-25T08:03:50Z
user: login: ksy21019
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-25T08:07:22Z

Review comments:
diff_hunk: @@ -0,0 +1,34 @@
+/**
+ * 카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
+갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
+
+다트 게임은 총 3번의 기회로 구성된다.
+각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.
+점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으로 계산된다.
+옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.
+스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고)
+스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고)
+스타상(*)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)
+Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.
+스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.
+0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
+ */
+
+// 찾아보며 풂..
+function solution(dartResult) {
+  const bonus = { 'S': 1, 'D': 2, 'T': 3 },
+        options = { '*': 2, '#': -1, undefined: 1 };
+
+  let darts = dartResult.match(/\d.?\D/g);
+
+  for (let i = 0; i < darts.length; i++) {
+      let split = darts[i].match(/(^\d{1,})(S|D|T)(\*|#)?/),
path: 권수영/0325/17682_다트 게임.js
user: login: soyeon0116
body: 정규식... 대단하십니다..
created_at: 2025-03-25T07:47:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,47 @@
+/**
+ * 문제 설명
+ * 과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.
+ * 
+ * 한 상자에 사과를 m개씩 담아 포장합니다.
+ * 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.
+ * 과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)
+ * 
+ * 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
+ * 
+ * (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
+ * 사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.
+ * 
+ * 제한사항
+ * 3 ≤ k ≤ 9
+ * 3 ≤ m ≤ 10
+ * 7 ≤ score의 길이 ≤ 1,000,000
+ * 1 ≤ score[i] ≤ k
+ * 이익이 발생하지 않는 경우에는 0을 return 해주세요.
+ */
+
+function solution(k, m, score) {
+  let max = 0;
+  score.sort((a, b) => b - a);
+
+  const count = parseInt(score.length / m);
+
+  for (let i = m - 1; i < m * count; i += m) {
path: 권수영/0324/135808_과일 장수.js
user: login: SinYusi
body: count가 필요한 이유를 잘 모르겠습니다! 설명해주실 수 있나요?
created_at: 2025-03-25T07:53:52Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,33 @@
+/**
+ * 문제 설명
+ * 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
+ * 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
+ * 
+ * 제한 사항
+ * 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
+ * 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
+ */
+
+function solution(s) {
+  let answer = '';
+  let words = s.split(' ');
+  
+  for(let i = 0; i < words.length; i++) {
+      for(let j = 0; j < words[i].length; j++) {
+          if(j % 2 === 0) {
+              answer += words[i][j].toUpperCase();
+          } else {
+              answer += words[i][j].toLowerCase();
+          }
+      }
path: 권수영/0324/12930_이상한 문자 만들기.js
user: login: gaeunchoi
body: 요기도 삼항연산자로 줄이면 깔끔해질것같네용 !
created_at: 2025-03-25T07:57:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,47 @@
+/**
+ * 문제 설명
+ * 과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.
+ * 
+ * 한 상자에 사과를 m개씩 담아 포장합니다.
+ * 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.
+ * 과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)
+ * 
+ * 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
+ * 
+ * (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
+ * 사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.
+ * 
+ * 제한사항
+ * 3 ≤ k ≤ 9
+ * 3 ≤ m ≤ 10
+ * 7 ≤ score의 길이 ≤ 1,000,000
+ * 1 ≤ score[i] ≤ k
+ * 이익이 발생하지 않는 경우에는 0을 return 해주세요.
+ */
+
+function solution(k, m, score) {
+  let max = 0;
+  score.sort((a, b) => b - a);
+
+  const count = parseInt(score.length / m);
+
+  for (let i = m - 1; i < m * count; i += m) {
path: 권수영/0324/135808_과일 장수.js
user: login: gaeunchoi
body: 박스에 m개의 사과가 차지 않는 경우(남는 사과 버리기)를 이렇게 하신 것 같아유 
created_at: 2025-03-25T07:58:09Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,47 @@
+/**
+ * 문제 설명
+ * 과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.
+ * 
+ * 한 상자에 사과를 m개씩 담아 포장합니다.
+ * 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.
+ * 과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)
+ * 
+ * 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
+ * 
+ * (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
+ * 사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.
+ * 
+ * 제한사항
+ * 3 ≤ k ≤ 9
+ * 3 ≤ m ≤ 10
+ * 7 ≤ score의 길이 ≤ 1,000,000
+ * 1 ≤ score[i] ≤ k
+ * 이익이 발생하지 않는 경우에는 0을 return 해주세요.
+ */
+
+function solution(k, m, score) {
+  let max = 0;
+  score.sort((a, b) => b - a);
+
+  const count = parseInt(score.length / m);
+
+  for (let i = m - 1; i < m * count; i += m) {
path: 권수영/0324/135808_과일 장수.js
user: login: SinYusi
body: 아하 글쿤요. 오로지 반복문을 위한 것이라면 i < score.length로만 진행해도 좋을 것 같습니다~
created_at: 2025-03-25T08:03:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,47 @@
+/**
+ * 문제 설명
+ * 과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.
+ * 
+ * 한 상자에 사과를 m개씩 담아 포장합니다.
+ * 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.
+ * 과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)
+ * 
+ * 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
+ * 
+ * (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
+ * 사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.
+ * 
+ * 제한사항
+ * 3 ≤ k ≤ 9
+ * 3 ≤ m ≤ 10
+ * 7 ≤ score의 길이 ≤ 1,000,000
+ * 1 ≤ score[i] ≤ k
+ * 이익이 발생하지 않는 경우에는 0을 return 해주세요.
+ */
+
+function solution(k, m, score) {
+  let max = 0;
+  score.sort((a, b) => b - a);
+
+  const count = parseInt(score.length / m);
+
+  for (let i = m - 1; i < m * count; i += m) {
path: 권수영/0324/135808_과일 장수.js
user: login: ksy21019
body: 가은님 말씀대로 진행하였습니다 대신 답변 감사드립니다!
유승님 피드백 감사드려요~
created_at: 2025-03-25T08:07:22Z
author_association: CONTRIBUTOR

PR comments:
user: login: soyeon0116
created_at: 2025-03-25T07:48:18Z
body: 오랜 시간 문제 푸시느라 고생 많으셨습니다!!
author_association: CONTRIBUTOR
user: login: yg5057
created_at: 2025-03-25T07:52:39Z
body: 4시간동안 알고리즘 문제 푸시느라 수고 많으셨습니다😂
머리에 쥐나는 줄 알았어요..!
고생하셨습니당!!
author_association: CONTRIBUTOR
user: login: gaeunchoi
created_at: 2025-03-25T07:58:47Z
body: 다들 엄청 잘푸시네용 ... 오늘도 고생하셨습니다 !
author_association: CONTRIBUTOR