Jieunny์˜ ๋ธ”๋กœ๊ทธ

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ฐฉ๋ฌธ ๊ธธ์ด ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ฐฉ๋ฌธ ๊ธธ์ด

Jieunny 2023. 7. 20. 17:25

๐Ÿ“Œ  ๋ฌธ์ œ

๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๋ฅผ 4๊ฐ€์ง€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์›€์ง์ด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

U : ์œ„์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ

D : ์•„๋ž˜์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ

L : ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ

R : ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ

์บ๋ฆญํ„ฐ๋Š” ์ขŒํ‘œํ‰๋ฉด์˜ (0, 0) ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ขŒํ‘œํ‰๋ฉด์˜ ๊ฒฝ๊ณ„๋Š” ์™ผ์ชฝ ์œ„(-5, 5), ์™ผ์ชฝ ์•„๋ž˜(-5, -5), ์˜ค๋ฅธ์ชฝ ์œ„(5, 5), ์˜ค๋ฅธ์ชฝ ์•„๋ž˜(5, -5)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ, ์šฐ๋ฆฌ๋Š” ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์ง€๋‚˜๊ฐ„ ๊ธธ ์ค‘ ์บ๋ฆญํ„ฐ๊ฐ€ ์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ์˜ˆ์‹œ์—์„œ ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ธ ๊ธธ์ด๋Š” 9์ด์ง€๋งŒ, ์บ๋ฆญํ„ฐ๊ฐ€ ์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ์˜ ๊ธธ์ด๋Š” 7์ด ๋ฉ๋‹ˆ๋‹ค. (8, 9๋ฒˆ ๋ช…๋ น์–ด์—์„œ ์›€์ง์ธ ๊ธธ์€ 2, 3๋ฒˆ ๋ช…๋ น์–ด์—์„œ ์ด๋ฏธ ๊ฑฐ์ณ ๊ฐ„ ๊ธธ์ž…๋‹ˆ๋‹ค) 

๋‹จ, ์ขŒํ‘œํ‰๋ฉด์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๋ช…๋ น์–ด๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜ dirs๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜์—ฌ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

๐Ÿ’ก  ์•„์ด๋””์–ด

์บ๋ฆญํ„ฐ๊ฐ€ ๊ฑฐ์ณ๊ฐ„ ๊ฒฝ๋กœ๋ฅผ ์ด์ฐจ์› ๋ฐฐ์—ด๋กœ ์ €์žฅํ•œ๋‹ค.

๊ฒน์น˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์—†์• ๊ธฐ์œ„ํ•ด Set์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋ฏ€๋กœ ์ด์ฐจ์› ๋ฐฐ์—ด๋กœ ์ €์žฅํ•ด๋’€๋˜ ๊ฒฝ๋กœ๋ฅผ string์œผ๋กœ ๋ฐ”๊ฟ”์„œ Set์— ์ €์žฅํ•œ๋‹ค.

์ด๋•Œ, [0, 1] => [1, 2] ๊ฒฝ๋กœ์™€ [1, 2] => [0, 1] ๊ฒฝ๋กœ๋Š” ๊ฐ™์€ ๊ฒฝ๋กœ์ด๋ฏ€๋กœ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์„œ ํ•œ๋ฒˆ ๋” ์ €์žฅํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Set์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ, ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊นŒ์ง€ ํฌํ•จ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— /2๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

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

function solution(dirs) {
  let unique = new Set();

  const dir = {'U' : 1, 'D' : -1, 'R' : 1, 'L' : -1};
  let pass = [[0, 0]];
  for(let i of dirs){
    pl = pass.length;
    if(i === 'U' || i === 'D') {
      if(pass[pl-1][1] + dir[i] >= -5 && pass[pl-1][1] + dir[i] <= 5 ) {
        pass.push([pass[pl-1][0], pass[pl-1][1] + dir[i]]);
      }
    }
    else if(i === 'L' || i === 'R') {
      if(pass[pl-1][0] + dir[i] >= -5 && pass[pl-1][0] + dir[i] <= 5) {
        pass.push([pass[pl-1][0] + dir[i], pass[pl-1][1]]);
      }
    }
  }
  for(let i=0; i<pass.length-1; i++){
    let route = [...pass[i], ...pass[i+1]].join('');
    let verse = [...pass[i+1], ...pass[i]].join('');
    if(!unique.has(route)) {
      unique.add(route);
    }
    if(!unique.has(verse)) {
      unique.add(verse);
    }
  }

  return unique.size/2;
}