๊ธ€ ์ž‘์„ฑ์ž: ์ด์ง€์›๐ŸŒฉ๏ธ

19:15

16:14์— ์ดˆ์•ˆ ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ–ˆ๊ณ , ์ด ๋•Œ ์‹คํ–‰ํ•œ ์ฝ”๋“œ๋Š” 1~8๋ฒˆ๊นŒ์ง€๋Š” ๋งž์•˜์œผ๋‚˜ ๊ทธ ์ดํ›„์˜ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์‹คํŒจํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์„ ์ฐธ๊ณ ํ•˜์˜€๊ณ , UDU์˜ ๊ฒฝ์šฐ๊ฐ€ 1์ด ๋‚˜์™€์•ผ ํ•œ๋‹ค๋Š” ๊ธ€์„ ๋ณด๊ณ  ์™„์„ฑ์‹œ์ผฐ๋‹ค.

Xcode๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ์ง์ ‘ ํ’€์—ˆ๋‹ค.

  1. dirs๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ dir์˜ ๊ฐ’์— ๋”ฐ๋ผ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • enumerated()๋Š” ๋””๋ฒ„๊น…ํ•˜๋ ค๊ณ  ์“ด ๊ฑฐ๋ผ ๊ตณ์ด ํ•„์š” ์—†์Œ
  2. ~= ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹น ๋ฒ”์œ„์— ์ผ์น˜ํ•˜๋ฉด ๋™์ž‘ ์ˆ˜ํ–‰. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ dir๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  3. ์•ˆ ๊ฐ€๋ณธ ๊ธธ๋งŒ visited ๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.
    1. ์ด๊ฒƒ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด, ํ˜„์žฌ ์œ„์น˜์™€ ์ด์ „ ์œ„์น˜๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด๋ ‡๊ฒŒ๋งŒ ํ™•์ธํ–ˆ๋‹ค.
      if !visited.contains([curX, curY, prevX, prevY])
    2. ์ด๋ ‡๊ฒŒ๋งŒ ๊ฒ€์‚ฌํ–ˆ์„ ๋•Œ ๋ฌธ์ œ์ ์€ [0, 1, 0, 0]๊ณผ [0, 0, 0, 1]์„ ๊ฐ™์ง€ ์•Š์€ ๊ธธ๋กœ ํŒ๋‹จํ•œ๋‹ค.
    3. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ”์„œ๋„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค.
      if !visited.contains([curX, curY, prevX, prevY]) && !visited.contains([prevX, prevY, curX, curY])


๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/49994


๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

Swift

import Foundation

func solution(_ dirs:String) -> Int {
    var curX = 0
    var curY = 0
    var prevX = 0
    var prevY = 0
    var visited = [[Int]]()
    
    for (i, dir) in dirs.enumerated() {
        if dir == "U" {
            if -5...4 ~= curY {
                curY += 1    
            } else {
                continue
            }
        } else if dir == "D" {
            if -4...5 ~= curY {
                curY -= 1    
            } else {
                continue
            }
        } else if dir == "R" {
            if -5...4 ~= curX {
                curX += 1    
            } else {
                continue
            }
        } else if dir == "L" {
            if -4...5 ~= curX {
                curX -= 1
            } else {
                continue
            }
        }
        
        // ์•ˆ ๊ฐ€๋ณธ ๊ธธ์ด๋ฉด ๋„ฃ๊ธฐ
        if !visited.contains([curX, curY, prevX, prevY]) && !visited.contains([prevX, prevY, curX, curY]) { 
            visited.append([curX, curY, prevX, prevY])
            print(i)
        }
        prevX = curX
        prevY = curY
    }
    
    return visited.count
}
๋ฐ˜์‘ํ˜•