inflearn logo
강의

Course

Instructor

Introduction to Javascript Algorithm Problem Solving (Coding Test Preparation)

4. Graduation gift

코드 리뷰

183

k291760731

6 asked

0

 

// Section 4. 완전 탐색 (브루트 포스) - 졸업 선물
// 문제 해결 과정
// [v] 문제 이해 : 현재 예산으로 최대 몇명의 학생에게 선물을 사줄 수 있는지 구하기
// [v] 상품 하나를 50% 할인해서 살 수 있다. => 들어온 상품 중에 가장 "비싼" 상품에 할인을 적용
// [v] 각 상품과 배송비를 합친 후 오름 차순 정렬
// [v] 정렬된 리스트에서 예산이 될 때마다 감산 적용하고, 안된다면 그대로 stop -> cnt 반환

function solution(m, product) {
  let answer = 0;
  let max = Number.MIN_SAFE_INTEGER;

  // 가장 비싼 상품 찾아서 50% 할인 적용하기
  for (let i = 0; i < product.length - 1; i++) {
    for (let j = 0; j < product[i].length; j++) {
      if (product[i + 1][0] > max) {
        max = product[i + 1][0];
      }
    }
  }

  for (let i = 0; i < product.length; i++) {
    if (product[i][product[i].indexOf(max)]) {
      product[i][product[i].indexOf(max)] /= 2;
    }
  }

  // 각 상품과 배송비를 합쳐서 정렬한다.
  const sum_arr = quick_sort(
    product.map((value) => {
      return value[0] + value[1];
    })
  );

  // 정렬된 리스트에서 예산이 될 때마다 감산 적용하고, 안된다면 그대로 stop -> cnt 반환
  sum_arr.map((value) => {
    if (m - value < 0) return;
    m -= value;
    answer++;
  });

  return answer;
}

function quick_sort(arr) {
  if (arr.length < 2) return arr;

  const left = [];
  const right = [];
  const middle = arr[0];

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < middle) {
      left.push(arr[i]);
    } else if (arr[i] > middle) {
      right.push(arr[i]);
    } else {
      middle.push(arr[i]);
    }
  }
  return quick_sort(left).concat(middle, quick_sort(right));
}

let arr = [
  [6, 6],
  [2, 2],
  [4, 3],
  [4, 5],
  [10, 3],
];
console.log(solution(28, arr)); // 4

 

너무 불필요한 반복문이 사용되는걸까요 ?

어떻게 보시는지 궁금합니다 ..

javascript 코테 준비 같이 해요!

Answer 1

0

codingcamp

안녕하세요^^

solution 함수 부분에 for문 정도는 그렇게 많아 보이지 않습니다. 이 정도면 괜찮다고 생각됩니다.

continue를 사용하는 이유

0

82

2

정렬 가능 여부 판단하기

0

66

2

알고리즘 학습법 관련해서 질문드립니다.

0

86

1

코드 리뷰 부탁드립니다!

0

91

1

indexOf를 사용해서 풀어보았습니다 !!

0

69

1

저는 이런식으로 구현 해보았습니다 !!

0

65

1

12,13,14 강의 소리만 나오고 검은 화면입니다

0

101

3

반복문 최소화하고 indexOf 사용해서 풀어봤습니다

0

63

1

영상 보기 전에 직접 풀어봤습니다.

0

75

1

섹션1의 17번문제 이 풀이로 풀어도 될까요?

0

136

2

정규표현식으로 처리해도 상관없나요 ?

0

120

2

3칸씩 건너뛸 수 있을 경우

0

126

2

강의에 대해 질문있습니다.

0

136

2

Object와 Set을 이용해 풀어봤습니다.

0

117

2

이렇게 해도 되나요?

0

102

2

선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.

0

145

2

이렇게 풀어도 괜찮을까요?

0

139

1

이렇게 풀어도 괜찮을까요?

0

114

1

모든 아나그램 찾기에서 시간복잡도

0

98

1

코드리뷰 부탁드립니다.

0

130

1

for loop 탈출은 return 문으로 해도 되지 않나요?

0

133

1

투포인트알고리즘으로 풀어봤습니다.

0

142

0

코드 리뷰 부탁드립니다.

0

120

1

코드 맞게 작성한 거 아닌가여??

0

146

1