[알고리즘] 부족한 금액 계산하기, 격자판 최대합, 봉우리

Perfume·2022년 5월 2일
0

Algorithm

목록 보기
9/11
post-thumbnail

💡 부족한 금액 계산하기

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.

프로그래머스 문제 링크

일단 나는 for문을 통해 i를 count 수만큼 반복해서 price * i 를 하는 방향으로 문제를 풀었다.

function solution(price, money, count) {
  let totalPrice = 0;
  for (let i = 1; i <= count; i++) {
    let mul = price * i;
    totalPrice += mul;
  }
  return totalPrice > money ? totalPrice - money : 0;
}

그런데 다른 사람의 풀이를 보니 가우스 공식을 이용하면 반복문을 쓰지 않고도 간단하게 풀 수 있었다.

✨ 가우스 공식 (1부터 n까지 합을 구하는 공식) ✨

n * (n + 1) / 2

function solution(price, money, count) {
  const tmp = (price * count * (count + 1)) / 2 - money;
  return tmp > 0 ? tmp : 0;
}

1부터 n까지의 합을 구하는 공식이 n (n + 1) / 2인데 여기에 price배 만큼 곱해주는 거니까 price n * (n + 1) / 2 이라는 식이 나온 것이다. 그저 WOW 👏🏽

💡 격자판 최대합

이차원 배열을 탐색하는 문제였다. 이 문제를 통해 이차원 배열에 arr[][]로 접근할 수 있다는 것을 처음 배웠다. 예를 들어 아래와 같은 배열이 있을 때,

let cats = [
  ["cherie", 1], ["homie", 2], ["honey", 3],
];

homie라는 값에 접근하려면 cats[1][0] 으로 접근하면 된다.

function solution(arr) {
  let answer = Number.MIN_SAFE_INTEGER;
  let n = arr.length;
  let sumOfLow = (sumOfColumn = 0);
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      sumOfLow += arr[i][j];
      sumOfColumn += arr[j][i];
    }
    answer = Math.max(answer, sumOfLow, sumOfColumn);
  }
  sumOfLow = sumOfColumn = 0;
  for (let i = 0; i < n; i++) {
    sumOfLow += arr[i][i];
    sumOfColumn += arr[i][n - i - 1];
  }
  return answer;
}

💡 봉우리 계산

🤯 아 솔직히 이 문제 어떻게 푸는지 전혀 이해 못했다.. 배열 탐색 더 공부하고 내용 수정하겠다.

profile
공부하는 즐거움

0개의 댓글