inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

4. 졸업선물

이 풀이도 가능한지 궁금합니다 !

315

kimcola

작성한 질문수 3

0

function solution(M, arr) {
  const N = arr.length;
  let answer = Number.MIN_SAFE_INTEGER;

  for (let i = 0; i < N; i++) {
    let pp = []; // 상품 가격
    let pd = 0; // 배송비
    let cnt = 1;
    pp.push(arr[i][0]);
    pd += arr[i][1];
    for (let j = i + 1; j < N; j++) {
      pp.push(arr[j][0]);
      pd += arr[j][1];
      cnt++;

      const maxPrice = Math.max(...pp);
      // 총 가격 계산
      const totalProductPrice = pp.reduce((total, val) => {
        if (val === maxPrice) total += val / 2;
        else total += val;
        return total;
      }, 0);
      const totalPrice = totalProductPrice + pd;
      if (totalPrice > M) break;
      answer = Math.max(answer, cnt);
    }
  }

  return answer;
}

 

 

현재 예제에서는 답이 나오는데 괜찮은지 문의드립니다 !

javascript 코딩-테스트

답변 2

0

김태원

안녕하세요^^

네. 잘 하신 코드입니다. 반례는 없어보입니다. 다만 영상의 방법도 꼭 익혀두시기 바랍니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

제공해주신 코드를 봤을 때, 기능적으로는 문제 없어 보이지만 코드의 가독성을 높이고 성능을 개선할 여지가 있습니다. 예를 들어, 가격을 비교하는 부분에서 Math.max() 메서드를 사용하는 대신, for 문으로 간단하게 구현할 수 있습니다. 또한, pp 배열은 let pp = [arr[i][0]] 처럼 초기화하는 것이 더 간결합니다.

아래는 코드를 개선한 예시입니다.

function solution(M, arr) {
  const N = arr.length;
  let answer = Number.MIN_SAFE_INTEGER;

  for (let i = 0; i < N; i++) {
    let pPrice = arr[i][0]; // 첫 상품 가격
    let dPrice = arr[i][1]; // 첫 배송비
    let cnt = 1;

    for (let j = i + 1; j < N; j++) {
      const cPrice = arr[j][0];
      const cDlv = arr[j][1];
      
      if (cPrice > pPrice) {
        pPrice = cPrice; // 최대 가격 업데이트
      }
      
      dPrice += cDlv; // 배송비 누적
      cnt++;
      
      const total = pPrice * cnt + dPrice;
      if (total > M) break;
      
      answer = Math.max(answer, cnt);
    }
  }

  return answer;
}

코드의 가독성을 높이기 위해 변수 이름을 좀 더 명확하게 바꿨고, pp 배열을 없앴습니다. 또한, 상품 가격 중 최대값을 찾기 위해 Math.max() 대신 if 문을 사용하도록 변경하고, 이를 위해 pp 배열 또한 대체되었습니다. 이렇게 함으로써, 코드가 더 직관적이고 성능도 더 개선된 것으로 생각됩니다.

그리고, 가능하다면 코드 중간중간에 각 라인이 어떤 역할을 하는지 주석을 달아준다면 가독성을 높일 수 있습니다.

위 내용이 도움이 되었으면 좋겠습니다. 감사합니다!

continue를 사용하는 이유

0

82

2

정렬 가능 여부 판단하기

0

66

2

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

0

86

1

코드 리뷰 부탁드립니다!

0

90

1

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

0

69

1

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

0

64

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

138

1

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

0

113

1

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

0

98

1

코드리뷰 부탁드립니다.

0

130

1

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

0

133

1

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

0

142

0

코드 리뷰 부탁드립니다.

0

120

1

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

0

146

1