ํ•ด๋‹น ๋ฌธ์ œ๋Š” DFS๋กœ ๋ชจ๋“  ํ• ์ธ์œจ์˜ ์กฐํ•ฉ์„ ๊ตฌํ•˜๊ณ  ์™„์ „ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ์ตœ๊ณ ์˜ ๋ฐฉ์•ˆ์„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐Ÿงก๋ฌธ์ œ ์„ค๋ช…

์นด์นด์˜คํ†ก์—์„œ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ฌด์ œํ•œ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž…์ž ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด ์นด์นด์˜คํ†ก์—์„œ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธ ํ–‰์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ, ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž…์ž๋ฅผ ์ตœ๋Œ€ํ•œ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ.
  2. ์ด๋ชจํ‹ฐ์ฝ˜ ํŒ๋งค์•ก์„ ์ตœ๋Œ€ํ•œ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ.

1๋ฒˆ ๋ชฉํ‘œ๊ฐ€ ์šฐ์„ ์ด๋ฉฐ, 2๋ฒˆ ๋ชฉํ‘œ๊ฐ€ ๊ทธ ๋‹ค์Œ์ž…๋‹ˆ๋‹ค.

์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธ ํ–‰์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

  • n๋ช…์˜ ์นด์นด์˜คํ†ก ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ด๋ชจํ‹ฐ์ฝ˜ m๊ฐœ๋ฅผ ํ• ์ธํ•˜์—ฌ ํŒ๋งคํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ชจํ‹ฐ์ฝ˜๋งˆ๋‹ค ํ• ์ธ์œจ์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ• ์ธ์œจ์€ 10%, 20%, 30%, 40% ์ค‘ ํ•˜๋‚˜๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์นด์นด์˜คํ†ก ์‚ฌ์šฉ์ž๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ค€์„ ๋”ฐ๋ผ ์ด๋ชจํ‹ฐ์ฝ˜์„ ์‚ฌ๊ฑฐ๋‚˜, ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ ์‚ฌ์šฉ์ž๋“ค์€ ์ž์‹ ์˜ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ผ์ • ๋น„์œจ ์ด์ƒ ํ• ์ธํ•˜๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ ๊ตฌ๋งคํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ์‚ฌ์šฉ์ž๋“ค์€ ์ž์‹ ์˜ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๋น„์šฉ์˜ ํ•ฉ์ด ์ผ์ • ๊ฐ€๊ฒฉ ์ด์ƒ์ด ๋œ๋‹ค๋ฉด, ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค๋ฅผ ๋ชจ๋‘ ์ทจ์†Œํ•˜๊ณ  ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ 2๋ช…์˜ ์นด์นด์˜คํ†ก ์‚ฌ์šฉ์ž์™€ 2๊ฐœ์˜ ์ด๋ชจํ‹ฐ์ฝ˜์ด ์žˆ์„๋•Œ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋น„์œจ๊ฐ€๊ฒฉ
14010,000
22510,000
์ด๋ชจํ‹ฐ์ฝ˜๊ฐ€๊ฒฉ
17,000
29,000

1๋ฒˆ ์‚ฌ์šฉ์ž๋Š” 40%์ด์ƒ ํ• ์ธํ•˜๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ ๊ตฌ๋งคํ•˜๊ณ , ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๋น„์šฉ์ด 10,000์› ์ด์ƒ์ด ๋˜๋ฉด ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค๋ฅผ ๋ชจ๋‘ ์ทจ์†Œํ•˜๊ณ  ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•ฉ๋‹ˆ๋‹ค.
2๋ฒˆ ์‚ฌ์šฉ์ž๋Š” 25%์ด์ƒ ํ• ์ธํ•˜๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ ๊ตฌ๋งคํ•˜๊ณ , ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๋น„์šฉ์ด 10,000์› ์ด์ƒ์ด ๋˜๋ฉด ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค๋ฅผ ๋ชจ๋‘ ์ทจ์†Œํ•˜๊ณ  ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•ฉ๋‹ˆ๋‹ค.

1๋ฒˆ ์ด๋ชจํ‹ฐ์ฝ˜์˜ ๊ฐ€๊ฒฉ์€ 7,000์›, 2๋ฒˆ ์ด๋ชจํ‹ฐ์ฝ˜์˜ ๊ฐ€๊ฒฉ์€ 9,000์›์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ, 2๊ฐœ์˜ ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ 40%์”ฉ ํ• ์ธํ•œ๋‹ค๋ฉด, 1๋ฒˆ ์‚ฌ์šฉ์ž์™€ 2๋ฒˆ ์‚ฌ์šฉ์ž ๋ชจ๋‘ 1,2๋ฒˆ ์ด๋ชจํ‹ฐ์ฝ˜์„ ๊ตฌ๋งคํ•˜๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ตฌ๋งคํ•œ ์ด๋ชจํ‹ฐ์ฝ˜์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๋น„์šฉ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž… ์—ฌ๋ถ€
11, 29,600X
21, 29,600X

์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž…์ž๋Š” 0๋ช…์ด ๋Š˜์–ด๋‚˜๊ณ  ์ด๋ชจํ‹ฐ์ฝ˜ ํŒ๋งค์•ก์€ 19,200์›์ด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, 1๋ฒˆ ์ด๋ชจํ‹ฐ์ฝ˜์„ 30% ํ• ์ธํ•˜๊ณ  2๋ฒˆ ์ด๋ชจํ‹ฐ์ฝ˜์„ 40% ํ• ์ธํ•œ๋‹ค๋ฉด ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ตฌ๋งคํ•œ ์ด๋ชจํ‹ฐ์ฝ˜์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๋น„์šฉ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž… ์—ฌ๋ถ€
125,400X
21, 210,300O

2๋ฒˆ ์‚ฌ์šฉ์ž๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๋น„์šฉ์„ 10,000์› ์ด์ƒ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค๋ฅผ ๋ชจ๋‘ ์ทจ์†Œํ•˜๊ณ  ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž…์ž๋Š” 1๋ช…์ด ๋Š˜์–ด๋‚˜๊ณ  ์ด๋ชจํ‹ฐ์ฝ˜ ํŒ๋งค์•ก์€ 5,400์›์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์นด์นด์˜คํ†ก ์‚ฌ์šฉ์ž n๋ช…์˜ ๊ตฌ๋งค ๊ธฐ์ค€์„ ๋‹ด์€ 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด users, ์ด๋ชจํ‹ฐ์ฝ˜ m๊ฐœ์˜ ์ •๊ฐ€๋ฅผ ๋‹ด์€ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด emoticons๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ, ํ–‰์‚ฌ ๋ชฉ์ ์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ๋‹ฌ์„ฑํ–ˆ์„ ๋•Œ์˜ ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž… ์ˆ˜์™€ ์ด๋ชจํ‹ฐ์ฝ˜ ๋งค์ถœ์•ก์„ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


๐Ÿ’›์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค users์˜ ๊ธธ์ด = n โ‰ค 100
    • users์˜ ์›์†Œ๋Š” [๋น„์œจ, ๊ฐ€๊ฒฉ]์˜ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • users[i]๋Š” i+1๋ฒˆ ๊ณ ๊ฐ์˜ ๊ตฌ๋งค ๊ธฐ์ค€์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • ๋น„์œจ% ์ด์ƒ์˜ ํ• ์ธ์ด ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ ๊ตฌ๋งคํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
      • 1 โ‰ค ๋น„์œจ โ‰ค 40
    • ๊ฐ€๊ฒฉ์ด์ƒ์˜ ๋ˆ์„ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค์— ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค๋ฅผ ๋ชจ๋‘ ์ทจ์†Œํ•˜๊ณ  ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
      • 100 โ‰ค ๊ฐ€๊ฒฉ โ‰ค 1,000,000
      • ๊ฐ€๊ฒฉ์€ 100์˜ ๋ฐฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • 1 โ‰ค emoticons์˜ ๊ธธ์ด = m โ‰ค 7
    • emoticons[i]๋Š” i+1๋ฒˆ ์ด๋ชจํ‹ฐ์ฝ˜์˜ ์ •๊ฐ€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • 100 โ‰ค emoticons์˜ ์›์†Œ โ‰ค 1,000,000
    • emoticons์˜ ์›์†Œ๋Š” 100์˜ ๋ฐฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

๐Ÿ’š์ž…์ถœ๋ ฅ ์˜ˆ

usersemoticonsresult
[[40, 10000], [25, 10000]][7000, 9000][1, 5400]
[[40, 2900], [23, 10000], [11, 5200], [5, 5900], [40, 3100], [27, 9200], [32, 6900]][1300, 1500, 1600, 4900][4, 13860]

๐Ÿ’™์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ• ์ธํ•˜๋Š” ๊ฒƒ์ด ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž…์ž๋ฅผ ์ตœ๋Œ€ํ•œ ๋Š˜๋ฆฌ๋ฉด์„œ, ์ด๋ชจํ‹ฐ์ฝ˜ ํŒ๋งค์•ก ๋˜ํ•œ ์ตœ๋Œ€๋กœ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ด๋ชจํ‹ฐ์ฝ˜ํ• ์ธ์œจ
140
240
320
440

์œ„์™€ ๊ฐ™์ด ํ• ์ธํ•˜๋ฉด 4๋ช…์˜ ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ๊ฐ€์ž…์ž์™€ 13,860์›์˜ ํŒ๋งค์•ก์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ• ์ธ์œจ์„ ์ ์šฉํ•˜์—ฌ ์ด๋ชจํ‹ฐ์ฝ˜์„ ํŒ๋งคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ณด๋‹ค ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž…์ž๋ฅผ ์ตœ๋Œ€ํ•œ ๋Š˜๋ฆฌ๋ฉด์„œ, ์ด๋ชจํ‹ฐ์ฝ˜ ํŒ๋งค์•ก ๋˜ํ•œ ์ตœ๋Œ€๋กœ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, [4, 13860]์„ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.\


๐Ÿ’œ๋‚˜์˜ ํ’€์ด

function solution(users, emoticons) {
    // ํ• ์ธ์œจ ํผ์„ผํ…Œ์ด์ง€
    const salePercent = [10, 20, 30, 40]
    // ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ๋ชจ๋“  ํ• ์ธ์œจ
    const cases = []
    // ์ž„์‹œ ์‚ฌ์šฉ ๋ฐฐ์—ด
    const arr = []
    // emoticons์˜ ๊ธธ์ด
    const emoLen = emoticons.length
    // ์ •๋‹ต ์ž„ํ‹ฐํ”Œ๋Ÿฌ์Šค, ์†Œ๋“ ๋ฐฐ์—ด
    const result = [0,0]
    function saleDFS(depth = 0) {
        if(depth === emoLen) {
            cases.push([...arr])
            return
        }
        for(let i = 0 ; i < salePercent.length ; i++) {
            arr[depth] = salePercent[i]
            saleDFS(depth+1)
        }
    }
    saleDFS()
    // cases๋ฐฐ์—ด ์ˆœํšŒ
    cases.forEach((curCase, curCaseIdx) => {
        // ํ•ด๋‹น ํ• ์ธ์œจ์˜ ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ๊ฐ€์ž…์ž ์ˆ˜
        let emoticonPlus = 0
        // ํ•ด๋‹น ํ• ์ธ์œจ์˜ ์†Œ๋“
        let sumPrice = 0
        // users๋ฐฐ์—ด ์ˆœํšŒ
        users.forEach(([buyPercent, buyPlus], userIdx) => {
            let price = 0
            let etPlusFlag = false
            // emoticons๋ฐฐ์—ด ์ˆœํšŒ
            emoticons.every((et, etIdx) => {
                // ์ด๋ฒˆ ํ• ์ธ์œจ์ด ์œ ์ €์˜ ์š”๊ตฌ ํ• ์ธ์œจ๋ณด๋‹ค ๋†’์€ ๊ฒฝ์šฐ ์ฆ‰์‹œ ๊ตฌ๋งค
                if(curCase[etIdx] >= buyPercent) {
                    price += et * (100 - curCase[etIdx]) / 100 
                }
                // ํ• ์ธ์•ก์ด ์œ ์ €์˜ ์š”๊ตฌ ๊ธˆ์•ก์„ ๋„˜๊ธด๋‹ค๋ฉด ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ๊ตฌ์ž…
                if(price >= buyPlus) {
                    etPlusFlag = true
                    return false
                }
                return true
            })
            // ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ์‚ฌ๋žŒ์ธ๊ฐ€ ํŒ๋ณ„
            if(etPlusFlag) emoticonPlus++
            else sumPrice += price
        })
        // ์ด๋ฒˆ ํ• ์ธ์œจ์ด ๊ฐ€์žฅ ๋งŽ์€ ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ ๊ธฐ๋กํ–ˆ๋Š”๊ฐ€
        if(emoticonPlus > result[0]) {
            result[0] = emoticonPlus
            result[1] = sumPrice
        // ์ด๋ฒˆ ํ• ์ธ์œจ์ด ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๊ฐ™์ง€๋งŒ, ์ด ์†Œ๋“์ด ๋” ๋†’์€๊ฐ€
        } else if (result[0] === emoticonPlus && sumPrice > result[1]) {
            result[1] = sumPrice
        }
    })
    return result
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€