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

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ณต์› ์‚ฐ์ฑ… ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ณต์› ์‚ฐ์ฑ…

Jieunny 2023. 4. 3. 17:33

๐Ÿ“Œ  ๋ฌธ์ œ

์ง€๋‚˜๋‹ค๋‹ˆ๋Š” ๊ธธ์„ 'O', ์žฅ์• ๋ฌผ์„ 'X'๋กœ ๋‚˜ํƒ€๋‚ธ ์ง์‚ฌ๊ฐํ˜• ๊ฒฉ์ž ๋ชจ์–‘์˜ ๊ณต์›์—์„œ ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ์‚ฐ์ฑ…์„ ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค. ์‚ฐ์ฑ…์€ ๋กœ๋ด‡ ๊ฐ•์•„์ง€์— ๋ฏธ๋ฆฌ ์ž…๋ ฅ๋œ ๋ช…๋ น์— ๋”ฐ๋ผ ์ง„ํ–‰ํ•˜๋ฉฐ, ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

["๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ", "๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ" …]

 

์˜ˆ๋ฅผ ๋“ค์–ด "E 5"๋Š” ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ํ˜„์žฌ ์œ„์น˜์—์„œ ๋™์ชฝ์œผ๋กœ 5์นธ ์ด๋™ํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๋กœ๋ด‡ ๊ฐ•์•„์ง€๋Š” ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋ฅผ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

- ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ๋•Œ ๊ณต์›์„ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

- ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ์ค‘ ์žฅ์• ๋ฌผ์„ ๋งŒ๋‚˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

์œ„ ๋‘ ๊ฐ€์ง€์ค‘ ์–ด๋Š ํ•˜๋‚˜๋ผ๋„ ํ•ด๋‹น๋œ๋‹ค๋ฉด, ๋กœ๋ด‡ ๊ฐ•์•„์ง€๋Š” ํ•ด๋‹น ๋ช…๋ น์„ ๋ฌด์‹œํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ณต์›์˜ ๊ฐ€๋กœ ๊ธธ์ด๊ฐ€ W, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ H๋ผ๊ณ  ํ•  ๋•Œ, ๊ณต์›์˜ ์ขŒ์ธก ์ƒ๋‹จ์˜ ์ขŒํ‘œ๋Š” (0, 0), ์šฐ์ธก ํ•˜๋‹จ์˜ ์ขŒํ‘œ๋Š” (H - 1, W - 1) ์ž…๋‹ˆ๋‹ค.

๊ณต์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด park, ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด routes๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ๋ชจ๋“  ๋ช…๋ น์„ ์ˆ˜ํ–‰ ํ›„ ๋†“์ธ ์œ„์น˜๋ฅผ [์„ธ๋กœ ๋ฐฉํ–ฅ ์ขŒํ‘œ, ๊ฐ€๋กœ ๋ฐฉํ–ฅ ์ขŒํ‘œ] ์ˆœ์œผ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

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

์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ๊ณณ์ด ํ•ญ์ƒ 0, 0์ด ์•„๋‹ˆ๋ฏ€๋กœ S๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฐพ์•„์„œ current ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ค€๋‹ค.

if๋ฌธ์œผ๋กœ ๋™, ์„œ, ๋‚จ, ๋ถ ๋ถ„๊ธฐ๋ฅผ ๋‚˜๋ˆ ์„œ map ํฌ๊ธฐ๋ฅผ ๋„˜์–ด๊ฐ€๋Š”์ง€, ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ฐ€๋Š” ๊ธธ์— ์žฅ์• ๋ฌผ์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•œ๋‹ค.

(switch ์“ฐ๋Š” ๊ฒŒ ๋” ๋‚˜์•˜์„ ๊ฒƒ ๊ฐ™๋‹ค)

 

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

function solution(park, routes) {
  let current = [0, 0];
  
  for(let i=0; i<park[0].length; i++){
  // ์‹œ์ž‘ ์ง€์  ์ฐพ์•„์ฃผ๊ธฐ
    for(let j=0; j<park.length; j++){
      if(park[j][i] === 'S'){
        current = [j, i];
        break;
      }
    }
  }
  
  const route = [];
  
  for(let i=0; i<routes.length; i++){
  // split์œผ๋กœ ๋ฐฉํ–ฅ๊ณผ ๋ช‡ ์นธ ๊ฐ€๋Š”์ง€ ๋‚˜๋ˆ ์„œ ์ €์žฅํ•ด์ฃผ๊ธฐ
    let temp = routes[i].split(' ');
    route.push(temp);
  }

  route.map((item) => {
  // map ํ•จ์ˆ˜๋กœ ๋ฐ˜๋ณต ๋Œ๊ธฐ
    if(item[0] === 'N' && (current[0] - Number(item[1])) >= 0) {
      let can = true;
      for(let i=1; i<=Number(item[1]); i++){
        if(park[current[0] - i][current[1]] === 'X') can = false;
      }
      if(can === true) current[0] -= Number(item[1]);
    }
    
    else if(item[0] === 'S' && (current[0] + Number(item[1])) < park.length) {
      let can = true;
      for(let i=1; i<=Number(item[1]); i++){

        if(park[current[0] + i][current[1]] === 'X') {
          can = false;
        }
      }
      if(can === true) current[0] += Number(item[1]);
    }
    
    else if(item[0] === 'W' && (current[1] - Number(item[1])) >= 0) {
      let can = true;
      for(let i=1; i<=Number(item[1]); i++){
        if(park[current[0]][current[1] - i] === 'X') can = false;
      }
      if(can === true) current[1] -= Number(item[1]);
    }
    
    else if(item[0] === 'E' && (current[1] + Number(item[1])) < park[0].length) {
      let can = true;
      for(let i=1; i<=Number(item[1]); i++){
        if(park[current[0]][current[1] + i] === 'X') can = false;
      }
      if(can === true) current[1] += Number(item[1]);
    }
  })
  
  return current;
}