๋ฐ์ํ
๊ตฌํ(Implementation)์ด๋ ๋จธ๋ฆฟ์์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ค์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ด๋ค.
๊ตฌํ ๋ฌธ์ ์ ํ์ ๋ชจ๋ ๋ฒ์์ ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ์ ํ์ ํฌํจํ๋ ๊ฐ๋ ์ด๋ค.
๊ตฌํ ์ ํ์ ๋ฌธ์ ๋ ํ์ด๋ฅผ ๋ ์ฌ๋ฆฌ๋ ๊ฒ์ ์ฝ์ง๋ง ์์ค์ฝ๋๋ก ์ฎ๊ธฐ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ด๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋จํ๋ฐ ์ฝ๋๊ฐ ์ง๋์น๊ฒ ๊ธธ์ด์ง๋ ๋ฌธ์
- ํน์ ์์์ ์๋ฆฌ๊น์ง ์ถ๋ ฅํด์ผ ํ๋ ๋ฌธ์
- ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋ ํ์ฑ ํด์ผ ํ๋ ๋ฌธ์
๊ตฌํ ์ ๊ณ ๋ คํด์ผ ํ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์ฌํญ
- ๋ณ์์ ํํ ๋ฒ์
- ๋ฆฌ์คํธ(๋ฐฐ์ด) ํฌ๊ธฐ
์์ ํ์: ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฃผ์ ์์ด ๋ค ๊ณ์ฐํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
์๋ฎฌ๋ ์ด์ : ๋ฌธ์ ์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋จ๊ณ์ฉ ์ฐจ๋ก๋๋ก ์ง์ ์ํ
๊ตฌํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์
์ํ์ข์ฐ
์ฌํ๊ฐ A๋ N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๊ณต๊ฐ ์์ ์ ์๋ค. ์ด ๊ณต๊ฐ์ 1 x 1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๊ฐ์ฅ ์ผ์ชฝ ์ขํ๋ (1,1)์ด๋ฉฐ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ขํ๋ (N, N)์ ํด๋นํ๋ค.
L: ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ด๋
R: ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋
U: ์๋ก ํ ์นธ ์ด๋
D: ์๋๋ก ํ ์นธ ์ด๋
๊ฐ ๋ฌธ์์ ์๋ฏธ๊ฐ ์์ ๊ฐ์ ๋ L, R, U, D ๋ฌธ์๋ค์ ์ ๋ ฅ๋ฐ์ A๊ฐ ์ต์ข ์ ์ผ๋ก ๋์ฐฉํ๋ ์ขํ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
(๋จ, N x N ์ ์ฌ๊ฐํ ๊ณต๊ฐ์ ๋ฒ์ด๋๋ ์์ง์์ ๋ฌด์๋๋ค.)
var n = Int(readLine()!)!
var plans = readLine()!.split(separator: " ").map{String($0)}
var x = 1, y = 1
var new_x = 0, new_y = 0
let dx = [0, 0, -1, 1]
let dy = [-1, 1, 0, 0]
let move_type = ["L", "R", "U", "D"]
for plan in plans{
for i in 0..<move_type.count{
if plan == move_type[i]{
new_x = x + dx[i]
new_y = y + dy[i]
}
if new_x < 1 || new_y < 1 || new_x > n || new_y > n{
continue
}
x = new_x
y = new_y
}
}
print("\(x) \(y)")
์์ค์ ๋์ดํธ
ํ๋ณต ์๊ตญ์ ์์ค ์ ์์ ์ฒด์คํ๊ณผ ๊ฐ์ 8 x 8 ์ขํ ํ๋ฉด์ด๋ค. ์์ค ์ ์์ ํน์ ํ ํ ์นธ์๋ ๋์ดํธ๊ฐ ์์๋ค.
๋์ดํธ๋ L์ ํํ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ, ์ ์ ๋ฐ์ผ๋ก๋ ๋๊ฐ ์ ์๋ค. ๋์ดํธ๋ ๋ค์๊ณผ ๊ฐ์ 2๊ฐ์ง ๊ฒฝ์ฐ๋ก ์ด๋ํ ์ ์๋ค.
1. ์ํ์ผ๋ก ๋ ์นธ ์ด๋ํ ๋ค์ ์์ง์ผ๋ก ํ ์นธ ์ด๋ํ๊ธฐ
2. ์์ง์ผ๋ก ๋ ์นธ ์ด๋ํ ๋ค์ ์ํ์ผ๋ก ํ ์นธ ์ด๋ํ๊ธฐ
๋์ดํธ์ ์ฒ์ ์์น๋ฅผ ์ ๋ ฅ๋ฐ์ ๋์ดํธ๊ฐ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
var input = readLine()!.map{String($0)}
var row = Int(input[1])!
var column = Int(exactly: Character(input[0]).asciiValue!)! - Int(Character("a").asciiValue!) + 1
let steps = [[-2, -1], [-1 , -2], [1 , -2], [2, -1], [2 , 1], [1, 2], [-1, -2], [-2, 1]]
var re = 0
var next_row = 0
var next_column = 0
for step in steps{
next_row = row + step[0]
next_column = column + step[1]
if next_row >= 1 && next_row <= 8 && next_column >= 1 && next_column <= 8{
re += 1
}
}
print(re)
๊ฒ์ ๊ฐ๋ฐ
ํ๋ฏผ์ด๋ ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ๋งต ์์์ ์์ง์ด๋ ์์คํ ์ ๊ฐ๋ฐ ์ค์ด๋ค. ์บ๋ฆญํฐ๊ฐ ์๋ ์ฅ์๋ 1x1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ์ด๋ฃจ์ด์ง NxM ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก, ๊ฐ ์นธ์ ์ก์ง ๋๋ ๋ฐ๋ค์ด๋ค. ์บ๋ฆญํฐ๋ ๋์๋จ๋ถ ์ค ํ ๊ณณ์ ๋ฐ๋ผ๋ณธ๋ค.
๋งต์ ๊ฐ ์นธ์ (a, b)๋ก ๋ํ๋ผ ์ ์๊ณ , a๋ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, b๋ ์์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค.
์บ๋ฆญํฐ๋ ์ํ์ข์ฐ๋ก ์์ง์ผ ์ ์๊ณ , ๋ฐ๋ค๋ก ๋์ด์๋ ๊ณต๊ฐ์ ๊ฐ ์ ์๋ค. ์บ๋ฆญํฐ ์์ง์ ๋งค๋ด์ผ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ํ์ฌ ์์น์์ ํ์ฌ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐฉํฅ๋ถํฐ ์ฐจ๋ก๋๋ก ๊ฐ ๊ณณ์ ์ ํ๋ค.
2. ์บ๋ฆญํฐ์ ๋ฐ๋ก ์ผ์ชฝ ๋ฐฉํฅ์ ์์ง ๊ฐ๋ณด์ง ์์ ์นธ์ด ์กด์ฌํ๋ค๋ฉด, ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ ํ ๋ค์ ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ ์งํ๋ค. ์ผ์ชฝ ๋ฐฉํฅ์ ๊ฐ๋ณด์ง ์์ ์นธ์ด ์๋ค๋ฉด, ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ ๋ง ์ํ ํ 1๋จ๊ณ๋ก ๋์๊ฐ๋ค.
3. ๋ง์ฝ ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ด๋ฏธ ๊ฐ๋ดค๊ฑฐ๋ ๋ฐ๋ค๋ผ๋ฉด, ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ๋ค๋ก ๊ฐ๊ณ 1๋จ๊ณ๋ก ๋์๊ฐ๋ค.
3-1 ๋ค์ชฝ ๋ฐฉํฅ์ด ๋ฐ๋ค์ธ ์นธ์ด๋ผ ๋ค๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์๋ ์์ง์์ ๋ฉ์ถ๋ค.
๋งค๋ด์ผ์ ๋ฐ๋ผ ์บ๋ฆญํฐ๋ฅผ ์ด๋์ํจ ๋ค, ์บ๋ฆญํฐ๊ฐ ๋ฐฉ๋ฌธํ ์นธ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋์์ค.
var input = readLine()!.split(separator: " ").map{Int(String($0))!}
var n = input[0]
var m = input[1]
//๋ฐฉ๋ฌธํ ์์น๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋งต์ ์์ฑ
var d: [[Int]] = Array(repeating: Array(repeating: 0, count: m), count: n)
input = readLine()!.split(separator: " ").map{Int(String($0))!}
var x = input[0]
var y = input[1]
var direction = input[2]
//์ ์ฒด ๋งด ์ ๋ณด ์
๋ ฅ๋ฐ๊ธฐ
var arr: [[Int]] = Array(repeating: Array(repeating: 0, count: 0), count: n)
for i in 0..<n{
arr[i].append(contentsOf: readLine()!.split(separator: " ").map{Int(String($0))!})
}
var dx = [-1, 0, 1, 0]
var dy = [0, 1, 0, -1]
//์ผ์ชฝ์ผ๋ก ํ์
func turn_left(){
direction -= 1
if direction == -1{
direction = 3
}
}
//์๋ฎฌ๋ ์ด์
์์
var count = 0
var turn_time = 0
var nx: Int = 0
var ny: Int = 0
while true{
turn_left()
nx = x + dx[direction]
ny = y + dy[direction]
//ํ์ ํ ์ดํ ์ ๋ฉด์ ๊ฐ๋ณด์ง ์์ ์นธ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ด๋
if d[nx][ny] == 0 && arr[nx][ny] == 0{
d[nx][ny] = 1
x = nx
y = ny
count += 1
turn_time = 0
continue
}else{
turn_time += 1
}
//๋ค ๋ฐฉํฅ ๋ชจ๋ ๊ฐ ์ ์๋ ๊ฒฝ์ฐ
if turn_time == 4{
nx = x - dx[direction]
ny = y - dy[direction]
//๋ค๋ก ๊ฐ ์ ์๋ค๋ฉด ์ด๋
if arr[nx][ny] == 0{
x = nx
y = ny
}
//๋ค๊ฐ ๋ฐ๋ค๋ก ๋งํ์๋ ๊ฒฝ์ฐ
else{
break
}
turn_time = 0
}
}
print(count)
๋ฐ์ํ
'๐ Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) (0) | 2022.03.30 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ด์ง ํ์(Binary Search) (0) | 2022.03.25 |
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ(Sorting) (0) | 2022.03.24 |
[์๊ณ ๋ฆฌ์ฆ] DFS/ BFS (0) | 2022.03.23 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋(Greedy) (0) | 2022.03.08 |