19:15
16:14
์ ์ด์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์ด ๋ ์คํํ ์ฝ๋๋ 1~8๋ฒ๊น์ง๋ ๋ง์์ผ๋ ๊ทธ ์ดํ์ ํ
์คํธ์์๋ ์คํจํ๋ค. ๊ทธ๋์ ์ง๋ฌธ ๊ฒ์ํ์ ์ฐธ๊ณ ํ์๊ณ , UDU
์ ๊ฒฝ์ฐ๊ฐ 1์ด ๋์์ผ ํ๋ค๋ ๊ธ์ ๋ณด๊ณ ์์ฑ์์ผฐ๋ค.
Xcode
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ํ๋ก๊ทธ๋๋จธ์ค์์ ์ง์ ํ์๋ค.
dirs
๋ฅผ ์ํํ๋ฉด์dir
์ ๊ฐ์ ๋ฐ๋ผ ๋์์ ์ฒ๋ฆฌํ๋ค.enumerated()
๋ ๋๋ฒ๊น ํ๋ ค๊ณ ์ด ๊ฑฐ๋ผ ๊ตณ์ด ํ์ ์์
~=
์ฐ์ฐ์๋ฅผ ์ด์ฉํด ๋ฒ์๋ฅผ ํ์ธํ๊ณ , ํด๋น ๋ฒ์์ ์ผ์นํ๋ฉด ๋์ ์ํ. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์dir
๋ก ๋์ด๊ฐ๋ค.- ์ ๊ฐ๋ณธ ๊ธธ๋ง
visited
๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.- ์ด๊ฒ์ ํ์ธํ๊ธฐ ์ํด, ํ์ฌ ์์น์ ์ด์ ์์น๋ฅผ ๋ชจ๋ ์ ์ฅํ๋ค. ์ฒ์์๋ ์ด๋ ๊ฒ๋ง ํ์ธํ๋ค.
if !visited.contains([curX, curY, prevX, prevY])
- ์ด๋ ๊ฒ๋ง ๊ฒ์ฌํ์ ๋ ๋ฌธ์ ์ ์
[0, 1, 0, 0]
๊ณผ[0, 0, 0, 1]
์ ๊ฐ์ง ์์ ๊ธธ๋ก ํ๋จํ๋ค. - ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ์๋ ๊ฒ์ฌํด์ผ ํ๋ค.
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
}