Jieunny의 λΈ”λ‘œκ·Έ

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 할인 행사 λ³Έλ¬Έ

Study/Coding Test

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 할인 행사

Jieunny 2023. 4. 4. 16:02

πŸ“Œ  문제

XYZ λ§ˆνŠΈλŠ” μΌμ •ν•œ κΈˆμ•‘μ„ μ§€λΆˆν•˜λ©΄ 10일 λ™μ•ˆ νšŒμ› μžκ²©μ„ λΆ€μ—¬ν•©λ‹ˆλ‹€. XYZ λ§ˆνŠΈμ—μ„œλŠ” νšŒμ›μ„ λŒ€μƒμœΌλ‘œ 맀일 ν•œ 가지 μ œν’ˆμ„ ν• μΈν•˜λŠ” 행사λ₯Ό ν•©λ‹ˆλ‹€. ν• μΈν•˜λŠ” μ œν’ˆμ€ ν•˜λ£¨μ— ν•˜λ‚˜μ”©λ§Œ ꡬ맀할 수 μžˆμŠ΅λ‹ˆλ‹€. μ•Œλœ°ν•œ μ •ν˜„μ΄λŠ” μžμ‹ μ΄ μ›ν•˜λŠ” μ œν’ˆκ³Ό μˆ˜λŸ‰μ΄ ν• μΈν•˜λŠ” λ‚ μ§œμ™€ 10일 μ—°μ†μœΌλ‘œ μΌμΉ˜ν•  κ²½μš°μ— λ§žμΆ°μ„œ νšŒμ›κ°€μž…μ„ ν•˜λ € ν•©λ‹ˆλ‹€.

 

예λ₯Ό λ“€μ–΄, μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ΄ λ°”λ‚˜λ‚˜ 3개, 사과 2개, μŒ€ 2개, 돼지고기 2개, 냄비 1개이며, XYZ λ§ˆνŠΈμ—μ„œ 15일간 νšŒμ›μ„ λŒ€μƒμœΌλ‘œ ν• μΈν•˜λŠ” μ œν’ˆμ΄ λ‚ μ§œ μˆœμ„œλŒ€λ‘œ μΉ˜ν‚¨, 사과, 사과, λ°”λ‚˜λ‚˜, μŒ€, 사과, 돼지고기, λ°”λ‚˜λ‚˜, 돼지고기, μŒ€, 냄비, λ°”λ‚˜λ‚˜, 사과, λ°”λ‚˜λ‚˜μΈ κ²½μš°μ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€. 첫째 λ‚ λΆ€ν„° μ—΄ν˜ κ°„μ—λŠ” 냄비가 ν• μΈν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 첫째 λ‚ μ—λŠ” νšŒμ›κ°€μž…μ„ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‘˜μ§Έ λ‚ λΆ€ν„° μ—΄ν˜ κ°„μ—λŠ” λ°”λ‚˜λ‚˜λ₯Ό μ›ν•˜λŠ” 만큼 할인ꡬ맀할 수 μ—†κΈ° λ•Œλ¬Έμ— λ‘˜μ§Έ 날에도 νšŒμ›κ°€μž…μ„ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ…‹μ§Έ λ‚ , λ„·μ§Έ λ‚ , λ‹€μ„―μ§Έ λ‚ λΆ€ν„° 각각 μ—΄ν˜μ€ μ›ν•˜λŠ” μ œν’ˆκ³Ό μˆ˜λŸ‰μ΄ μΌμΉ˜ν•˜κΈ° λ•Œλ¬Έμ— μ…‹ 쀑 ν•˜λ£¨μ— νšŒμ›κ°€μž…μ„ ν•˜λ € ν•©λ‹ˆλ‹€.

 

μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ λ°°μ—΄ want와 μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ˜ μˆ˜λŸ‰μ„ λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ λ°°μ—΄ number, XYZ λ§ˆνŠΈμ—μ„œ ν• μΈν•˜λŠ” μ œν’ˆμ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ λ°°μ—΄ discountκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, νšŒμ›λ“±λ‘μ‹œ μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ„ λͺ¨λ‘ 할인 받을 수 μžˆλŠ” νšŒμ›λ“±λ‘ λ‚ μ§œμ˜ 총 일수λ₯Ό return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ‹œμ˜€. κ°€λŠ₯ν•œ 날이 μ—†μœΌλ©΄ 0을 return ν•©λ‹ˆλ‹€.

 

πŸ’‘  아이디어

discount 배열을 μ²˜μŒλΆ€ν„° 10κ°œμ”© λ‚˜λˆ μ„œ μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ΄ κ·Έ λ°°μ—΄ μ•ˆμ— 개수 만큼 μžˆλŠ”μ§€ μ œν’ˆ λ§ˆλ‹€ ν™•μΈν•œλ‹€.

ν•˜λ‚˜λΌλ„ μ—†μœΌλ©΄ κ·Έ λ‚ λΆ€ν„° νšŒμ›κ°€μž…μ„ ν•˜λ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ— νšŒμ›κ°€μž… μ—¬λΆ€λ₯Ό false둜 λ°”κΎΈκ³ , 더 이상 κ·Έ λ‚ μ§œ for문을 λŒμ§€ μ•Šκ²Œ breakν•˜κ³  처음 λ‚ μ§œμ˜ +1ν•œ λ‚ μ§œλ₯Ό μ‹œμž‘μœΌλ‘œ 10개λ₯Ό λ‹€μ‹œ λ‚˜λˆ μ„œ λ°˜λ³΅ν•œλ‹€.

νšŒμ›κ°€μž… μ—¬λΆ€κ°€ true인 λ‚ μ§œλŠ” νšŒμ›κ°€μž… 해도 λ˜λ―€λ‘œ true인 경우 answerλ₯Ό 증가 μ‹œμΌœμ€€λ‹€.

 

✏️  풀이

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

  for(let i=0; i<discount.length; i++){
    let ten = discount.slice(i, i+10);
    let can = true;
    for(let j=0; j<want.length; j++){
      let cnt = 0;
      for(let k=0; k<ten.length; k++){
        if(want[j] === ten[k]){
          cnt++;
        }
      }
      if(cnt !== number[j]){
        can = false;
        break;
      }
    }
    can ? answer++ : null;
  }

  return answer;
}