[프로그래머스 lev2/JS] 할인 행사

woolee의 기록보관소·2022년 11월 23일
0

알고리즘 문제풀이

목록 보기
105/178

문제 출처

프로그래머스 lev2 - 할인 행사

나의 풀이

1차 시도 (25/100, 런타임 에러)

function solution(want, number, discount) {
  let answer = 0;

  let li = {};
  for (let i = 0; i < want.length; i++) {
    li[want[i]] = number[i];
  }

  const liArr = Object.entries(li).sort();

  let ct = {};

  for (let i = 0; i <= discount.length - 10; i++) {
    [...discount.slice(i, i + 10)].map((v) => {
      if (ct[v]) ct[v]++;
      else ct[v] = 1;
    });
    const ctArr = Object.entries(ct).sort();
    let flag = true;
    for (let k = 0; k < liArr.length; k++) {
      if (liArr[k][0] !== ctArr[k][0] || liArr[k][1] !== ctArr[k][1])
        flag = false;
    }

    if (flag) answer++;
    ct = {};
  }
  return answer;
}

console.log(
  solution(
    ["banana", "apple", "rice", "pork", "pot"],
    [3, 2, 2, 2, 1],
    [
      "chicken",
      "apple",
      "apple",
      "banana",
      "rice",
      "apple",
      "pork",
      "banana",
      "pork",
      "rice",
      "pot",
      "banana",
      "apple",
      "banana",
    ]
  )
);

2차 시도 (통과)

  1. want,number 배열을 순회하면서
    배열[want]=number 형태로 객체 li를 생성한다.

  2. discount 배열을 순회하면서(discount.length-10만큼 순회한다),

  • 각 10개 배열에 대해 ct 객체를 생성하고
  • ct 객체와 li 객체를 비교한다.
  • 하나라도 다르면 false를 넣고, continue로 스킵해버린다.
    모두 같다면 answer++;을 해준다.

비교할 때 entries로 굳이 배열을 또 만들어서 메모리 낭비하지 않고 for in을 사용하니 런타임 에러를 해결할 수 있었다.

function solution(want, number, discount) {
  let answer = 0;

  let li = {};
  for (let i = 0; i < want.length; i++) {
    li[want[i]] = number[i];
  }

  let ct = {};

  for (let i = 0; i <= discount.length - 10; i++) {
    [...discount.slice(i, i + 10)].map((v) => {
      if (ct[v]) ct[v]++;
      else ct[v] = 1;
    });

    let flag = true;
    for (let x in li) {
      if (!ct[x] || ct[x] !== li[x]) {
        flag = false;
        continue;
      }
    }

    if (flag) answer++;
    ct = {};
  }
  return answer;
}

console.log(
  solution(
    ["banana", "apple", "rice", "pork", "pot"],
    [3, 2, 2, 2, 1],
    [
      "chicken",
      "apple",
      "apple",
      "banana",
      "rice",
      "apple",
      "pork",
      "banana",
      "pork",
      "rice",
      "pot",
      "banana",
      "apple",
      "banana",
    ]
  )
);
profile
https://medium.com/@wooleejaan

0개의 댓글