Skip to content

Cyclic Rotation ๋ฌธ์ œ ํ•ด๊ฒฐ โ€‹

๋ฌธ์ œ ์„ค๋ช… โ€‹

๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๊ณ , ์ •์ˆ˜ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฐฐ์—ด์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ K๋ฒˆ ํšŒ์ „์‹œํ‚จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์—์„œ ํšŒ์ „์ด๋ž€, ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋กœ ์ด๋™ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์š”์†Œ๋Š” ํ•œ ์นธ์”ฉ ๋’ค๋กœ ๋ฐ€๋ฆฌ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

  • ๋ฐฐ์—ด [3, 8, 9, 7, 6]์ด ์žˆ์„ ๋•Œ, K = 3์ด๋ฉด ๋ฐฐ์—ด์€ [9, 7, 6, 3, 8]๋กœ ๋ณ€ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• โ€‹

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช… โ€‹

  1. ์ฃผ์–ด์ง„ ๋ฐฐ์—ด A์™€ ํšŒ์ „ ํšŸ์ˆ˜ K์— ๋Œ€ํ•ด, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ N์ด๋ผ๊ณ  ํ•  ๋•Œ, ์‚ฌ์‹ค K๊ฐ€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ N๋ณด๋‹ค ํฌ๋ฉด K % N ๋งŒํผ๋งŒ ํšŒ์ „ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, K = N์ด๋ฉด ๋ฐฐ์—ด์ด ํ•œ ๋ฐ”ํ€ด ๋Œ์•„ ์›๋ž˜ ์ƒํƒœ๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.
  2. ๋ฐฐ์—ด์„ K % N ๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋ฉด, ๊ฒฐ๊ณผ๋Š” ๋ฐฐ์—ด์„ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ํ•ฉ์น˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ฐฐ์—ด์„ ํšŒ์ „์‹œํ‚ค๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
    • A.slice(N - K % N) ๋ถ€๋ถ„์„ ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ๋†“๊ณ ,
    • A.slice(0, N - K % N) ๋ถ€๋ถ„์„ ๋’ค์— ๋†“์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ๊ตฌํ˜„ โ€‹

typescript
function solution(A: number[], K: number): number[] {
  const length = A.length

  // ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ์„ ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
  if (length === 0) return A

  const rotation = K % length

  // ํšŒ์ „ ํšŸ์ˆ˜๊ฐ€ 0์ผ ๊ฒฝ์šฐ ์›๋ž˜ ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
  if (rotation === 0) return A

  const splitIndex = length - rotation

  // ๋ฐฐ์—ด์„ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ํ•ฉ์นจ
  return [...A.slice(splitIndex), ...A.slice(0, splitIndex)]
}

์ฝ”๋“œ ์„ค๋ช… โ€‹

  1. ๋นˆ ๋ฐฐ์—ด ์ฒ˜๋ฆฌ: ๋ฐฐ์—ด A๊ฐ€ ๋น„์–ด ์žˆ์„ ๊ฒฝ์šฐ ํšŒ์ „์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ํšŒ์ „ ํšŸ์ˆ˜ ์ตœ์ ํ™”: K๊ฐ€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ณด๋‹ค ํด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, K % length๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ํšŒ์ „ ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐฐ์—ด ๋ถ„ํ•  ๋ฐ ์žฌ์กฐํ•ฉ: ๋ฐฐ์—ด์„ slice๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์ด๋ฅผ ํ•ฉ์ณ์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„ โ€‹

  • ๋ฐฐ์—ด์„ slice๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐ O(N) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” **O(N)**์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ โ€‹

์˜ˆ์‹œ 1 โ€‹

์ž…๋ ฅ:

typescript
;(A = [3, 8, 9, 7, 6]), (K = 3)

์ถœ๋ ฅ:

typescript
;[9, 7, 6, 3, 8]

์˜ˆ์‹œ 2 โ€‹

์ž…๋ ฅ:

typescript
;(A = [0, 0, 0]), (K = 4)

์ถœ๋ ฅ:

typescript
;[0, 0, 0]

์˜ˆ์‹œ 3 โ€‹

์ž…๋ ฅ:

typescript
;(A = [1, 2, 3, 4]), (K = 2)

์ถœ๋ ฅ:

typescript
;[3, 4, 1, 2]

์ตœ์ข… ๊ฒฐ๋ก  โ€‹

์ด ์ฝ”๋“œ๋Š” CyclicRotation ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ํšŒ์ „ ํšŸ์ˆ˜๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ํšŒ์ „ ํšŸ์ˆ˜๊ฐ€ ๋ฐฐ์—ด ๊ธธ์ด๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋Š” K % N์„ ํ™œ์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ค„์ž…๋‹ˆ๋‹ค.