ํ๋ก๊ทธ๋๋จธ์ค - ๋ฐฉ๋ฌธ ๊ธธ์ด(Swift)
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฐฉ๋ฌธ ๊ธธ์ด(Swift)
๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/49994
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋์ ํ์ด
์ฒ์์๋ ์ถ๋ฐํ ์ง์ ์์ ๋์ฐฉํ ์ง์ ์ ์ ์ฅํ๊ธฐ ์ํด์ [(Int, Int): [(Int, (Int)]]ํ์์ ๋์ ๋๋ฆฌ๋ฅผ ์ ์ธํ๋ค. ํ์ง๋ง ํํ์ Hashableํ์ง ์์์๋์ง ์์๊ธฐ์ ๋ฌธ์์ด: ๋ฌธ์์ด๋ฐฐ์ด์ ํํ๋ก ๋์๋ค.
์ขํ๋ฅผ ๋ฌธ์์ด๋ก ๋ง๋ค๊ณ ๋์ ๋๋ฆฌ์ ์ ์ฅํ๋ฉด ์๋นํ ์ง์ ๋ถํ ์ฝ๋๊ฐ ๋๋ค. ๊ทธ๋์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ด์ฉํด์ ์ขํ๋ค์ ์ ์ฅํ๋ ๊ฒ์ ๋ณผ ์ ์์๋ค.
์ด ๋ฌธ์ ์ ํต์ฌ์ ๊ธฐ์กด์ขํ์ ์ถ๋ฐ์ ๊ณผ ๋์ฐฉ์ ์ด ์๋ก์ด ์ขํ์ ์ถ๋ฐ์ ๊ณผ ๋์ฐฉ์ ์ด ๊ฐ์ผ๋ฉด ์นด์ดํธํ์ง ์๋ค๋ ๊ฒ๊ณผ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ์นด์ดํธํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์ฆ (5, 5)์ ์ขํ์์ (5, 4)๋ก ์๋ก ํ๋ฒ ์ด๋ํ๋ ๊ฒ๊ณผ (5, 4)์ขํ์์ (5, 5)๋ก ์ด๋ํ๋ ๊ฒ์ ์ค๋ณตํด์ ์นด์ดํธํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ถ๋ถ๋ง ์ ์ฒ๋ฆฌํ๋ฉด ๋ฌธ์ ๋ ํด๊ฒฐ๋๋ค.
import Foundation
struct Road {
// x,y: ์๋ ์๋ ๊ณณ nx,ny: ์ด๋ํ ๊ณณ
let x: Int
let y: Int
let nx: Int
let ny: Int
}
func contains(_ roads: [Road], _ newRoad: Road) -> Bool {
for road in roads {
if road.x == newRoad.x && road.y == newRoad.y && road.nx == newRoad.nx && road.ny == newRoad.ny {
return true
}
if road.x == newRoad.nx && road.y == newRoad.ny && road.nx == newRoad.x && road.ny == newRoad.y {
return true
}
}
return false
}
func solution(_ dirs:String) -> Int {
var x = 5, y = 5
var roads: [Road] = []
for dic in dirs {
let prevX = x, prevY = y
switch dic {
case "U": if x-1 >= 0 { x -= 1 }
case "D": if x+1 <= 10 { x += 1 }
case "L": if y-1 >= 0 { y -= 1 }
case "R": if y+1 <= 10 { y += 1 }
default:
break
}
if x == prevX && y == prevY {
continue
}
let road = Road(x: prevX, y: prevY, nx: x, ny: y)
if !contains(roads, road) {
roads.append(road)
}
}
return roads.count
}
ํผ๋๋ฐฑ
์ฒ์์ ๋๋ ์ฃผ์ด์ง ๋ฐฉํฅ๋ค์ ํ์ํ๋ฉด์ ๋ฒ์๊ฐ๋ง ์ฒดํฌํ๊ณ ์ค์ ์ฐ์ฐ๋ถ๋ถ์ ๋ค๋ฅธ ํจ์๋ก ๋ฃ์๋ค.
ํ์ง๋ง ๋ฒ์๊ฐ์ ์ฒดํฌํ๋ฉด์ ์ฐ์ฐ์ํ๊ณ ๊ทธ ๋ถ๋ถ์ด ์ ํจํ์ง๋ฅผ ํ ์คํธํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ๋๊ฐ ์ค๊ณ ์ง๊ด์ ์ด์๋ค.
์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๋ ๊ฒ์ด ์๋๋ผ๋ฉด ํ๋์ ๋ธ๋ญ์์์ ๋๋๋ก ๋ง์ด ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค๊ณ ๋๊ผ๋ค.