Algorithm

[Algorithm] ๋‘˜๋งŒ์˜ ์–ธ์–ด

ghkdu2 2023. 4. 18. 20:53

๐Ÿ“‹๋ฌธ์ œ 

๋‘ ๋ฌธ์ž์—ด s์™€ skip, ๊ทธ๋ฆฌ๊ณ  ์ž์—ฐ์ˆ˜ index๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธ์˜ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด s์˜ ๊ฐ ์•ŒํŒŒ๋ฒณ์„ index๋งŒํผ ๋’ค์˜ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.
index๋งŒํผ์˜ ๋’ค์˜ ์•ŒํŒŒ๋ฒณ์ด z๋ฅผ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ๋‹ค์‹œ a๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
skip์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ ์ œ์™ธํ•˜๊ณ  ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด s = "aukks", skip = "wbqd", index = 5์ผ ๋•Œ, a์—์„œ 5๋งŒํผ ๋’ค์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ f์ง€๋งŒ [b, c, d, e, f]์—์„œ 'b'์™€ 'd'๋Š” skip์— ํฌํ•จ๋˜๋ฏ€๋กœ ์„ธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 'b', 'd'๋ฅผ ์ œ์™ธํ•˜๊ณ  'a'์—์„œ 5๋งŒํผ ๋’ค์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ [c, e, f, g, h] ์ˆœ์„œ์— ์˜ํ•ด 'h'๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ "ukks" ๋˜ํ•œ ์œ„ ๊ทœ์น™๋Œ€๋กœ ๋ฐ”๊พธ๋ฉด "appy"๊ฐ€ ๋˜๋ฉฐ ๊ฒฐ๊ณผ๋Š” "happy"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฌธ์ž์—ด s์™€ skip, ๊ทธ๋ฆฌ๊ณ  ์ž์—ฐ์ˆ˜ index๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์œ„ ๊ทœ์น™๋Œ€๋กœ s๋ฅผ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • 5 ≤ s์˜ ๊ธธ์ด ≤ 50
  • 1 ≤ skip์˜ ๊ธธ์ด ≤ 10
  • s์™€ skip์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • skip์— ํฌํ•จ๋˜๋Š” ์•ŒํŒŒ๋ฒณ์€ s์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 1 ≤ index ≤ 20

์ž…์ถœ๋ ฅ ์˜ˆ

"aukks" "wbqd" 5 "happy"

 

โœ๏ธ ํ’€์ด

s๊ฐ€ 50 ์ดํ•˜์ด๊ณ , index๊ฐ€ 20 ์ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™•์ธํ•˜๋ฉด์„œ ์ง„ํ–‰ํ•ด๋„ ๊ดœ์ฐฎ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

String.fromCharCode()์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ์ด์šฉํ•ด ์•ŒํŒŒ๋ฒณ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

์•ŒํŒŒ๋ฒณ์€ 97๋ถ€ํ„ฐ 122๊นŒ์ง€ ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ s ์ƒ์˜ ํ˜„์žฌ ์•ŒํŒŒ๋ฒณ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.(s.charCodeAt(i))

 

์ด ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฏธ๋ฆฌ skip์˜ ์•ŒํŒŒ๋ฒณ์„ ๋„ฃ์–ด๋‘” skipSet์—์„œ String.fromCharCode(idx)๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ (์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์•ŒํŒŒ๋ฒณ) ์—†๋Š” ๊ฒฝ์šฐ cnt๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๊ณ , ์žˆ๋Š” ๊ฒฝ์šฐ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ์ง€ ์•Š์œผ๋ฉด์„œ cnt๊ฐ€ index๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ while๋ฌธ์„ ์ด์šฉํ•ด์„œ ๋ฐ˜๋ณตํ–ˆ๋‹ค.  cnt๊ฐ€ index ๋งŒํผ ๋˜์—ˆ์„ ๋•Œ idx๋ฅผ ์ด์šฉํ•ด์„œ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  answer์— ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค.

 

(๋ฐ˜๋Œ€๋กœ skipSet์— ์•ŒํŒŒ๋ฒณ์„ ๋„ฃ์–ด์ฃผ์ง€ ์•Š๊ณ  ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ๋„ฃ์–ด์ค˜๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค.)

โŒจ๏ธ ์ฝ”๋“œ

function solution(s, skip, index) {
  var answer = '';

  const skipSet = new Set(skip.split(''));

  for (let i = 0; i < s.length; i++) {
    let cnt = 0;
    let idx = s.charCodeAt(i);
    while (cnt < index) {
      idx = idx + 1 > 122 ? 97 : idx + 1;
      if (!skipSet.has(String.fromCharCode(idx))) cnt += 1;
    }
    answer += String.fromCharCode(idx);
  }

  return answer;
}