๐Ÿ’ป Programming/Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv. 0] ๋ฐฐ์—ด ํšŒ์ „์‹œํ‚ค๊ธฐ

Jiwon() 2023. 7. 26. 09:31

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด
https://school.programmers.co.kr/learn/courses/30/lessons/120844
์‚ฌ์šฉ ์–ธ์–ด : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ JavaScript JS

1. ๋ฐฐ์—ด ํšŒ์ „์‹œํ‚ค๊ธฐ

1) ๋ฌธ์ œ ์„ค๋ช…

์ •์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numbers์™€ ๋ฌธ์ž์—ด direction๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋ฐฐ์—ด numbers์˜ ์›์†Œ๋ฅผ direction๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ์”ฉ ํšŒ์ „์‹œํ‚จ ๋ฐฐ์—ด์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

2) ์ œํ•œ ์‚ฌํ•ญ

  • 3 ≤ numbers์˜ ๊ธธ์ด ≤ 20
  • direction์€ "left" ์™€ "right" ๋‘˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

 

3) ์ž…์ถœ๋ ฅ ์˜ˆ

numbers direction result
[1, 2, 3] "right" [3, 1, 2]
[4, 455, 6, 4, -1, 45, 6] "left" [455, 6, 4, -1, 45, 6, 4]

 

 


2. ์‚ฌ์šฉ ๋ฉ”์„œ๋“œ - shift(), unshift(), push(), pop()

Deque(๋ฑ ๋˜๋Š” ๋ฐํฌ) - ์–‘๋ฐฉํ–ฅ ํ๋กœ, ์•ž, ๋’ค ์–‘์ชฝ ๋ฐฉํ–ฅ์—์„œ ์—˜๋ฆฌ๋จผํŠธ(element)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

Array.prototype.shift()

shift() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์—์„œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์ œ๊ฑฐ๋œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ณ€ํ•˜๊ฒŒ ํ•œ๋‹ค.

const array1 = [1, 2, 3];

const firstElement = array1.shift();

console.log(array1); // [2, 3]

console.log(firstElement); // 1

 

Array.prototype.unshift()

unshift() ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋ฐฐ์—ด์˜ ๋งจ ์•ž์ชฝ์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const array1 = [1, 2, 3];

console.log(array1.unshift(4, 5)); // 5

console.log(array1); // [4, 5, 1, 2, 3]

 

Array.prototype.push()

push() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๋์— ํ•˜๋‚˜ ์ด์ƒ์˜ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๋ฐฐ์—ด์˜ ์ƒˆ๋กœ์šด ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const animals = ['pigs', 'goats', 'sheep'];

const count = animals.push('cows');
console.log(count); // 4
console.log(animals); // ["pigs", "goats", "sheep", "cows"]

animals.push('chickens', 'cats', 'dogs');
console.log(animals); // ["pigs", "goats", "sheep", "cows", "chickens", "cats", "dogs"]

 

Array.prototype.pop()

pop() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์—์„œ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ทธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];

console.log(plants.pop()); // "tomato"

console.log(plants); // ["broccoli", "cauliflower", "cabbage", "kale"]

 

 


3. ๋‹ต์•ˆ

1) ๋‚˜์˜ ํ’€์ด

function solution(numbers, direction) {
    if (direction === "right") {
        numbers.unshift(numbers.pop())
    } else {
        numbers.shift(numbers.push(numbers[0]))
    }
    return numbers;
}

๋ฉ”์„œ๋“œ๊ฐ€ ์ •๋ง ์•ˆ์™ธ์›Œ์ ธ์„œ ๋ฉฐ์น ์„ ๋ถ™๋“ค๊ณ  ์žˆ์—ˆ๋˜ ๋ฌธ์ œ์ธ๋ฐ, ์œ„์˜ ๋ฐํฌ(deque) ์ด๋ฏธ์ง€๋ฅผ ๋ณด๊ณ  ๊ธˆ๋ฐฉ ์™ธ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€์œผ๋‚˜ numbers.shift(numbers.push(numbers[0])) ์€ ๋ญ˜๊นŒ..๐Ÿ˜‚ ์•„๋ž˜์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•˜๋ฉด ๋” ๊น”๋”ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋‹ต์•ˆ์ด ๋œ๋‹ค.

 

 

2) ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

function solution(numbers, direction) {
    if (direction === "right") {
        numbers.unshift(numbers.pop())
    } else {
        // ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊น”๋”..!
        // numbers.shift()๊ฐ€ ์–ด์ฐจํ”ผ ๋ฐฐ์—ด์˜ ๋งจ ์ฒ˜์Œ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ด
        numbers.push(numbers.shift())
    }
    return numbers;
}