#๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1021
#๋์ด๋
Silver 4
#์ ๊ทผ ๋ฐฉ๋ฒ ๋ฐ ์ค์ ํฌ์ธํธ
๋ฌธ์ ์์ 3๊ฐ์ง ์ฐ์ฐ์ ์ํํด์ผํ๋ค๊ณ ์ ์ํ๊ณ ์๋ค. ์ฐ์ฐ๋ค์ ์ฝ๋๋ก ์ด๋ป๊ฒ ๊ตฌํํ ์ง ์๊ฐํด๋ณด๋ฉด ๋ฑ(Deque) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. (์, ๋ค๋ก ์ฝ์
์ถ์ถ์ด ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ)
- ์ฒซ๋ฒ์งธ ์์ ์ถ์ถ : ์ฒซ๋ฒ์งธ ์์ ์ญ์
- ์ผ์ชฝ์ผ๋ก 1์นธ ์ด๋ : 0๋ฒ ์์ ์ถ์ถํด์ ๋งจ ๋ค์ ์ฝ์
- ์ค๋ฅธ์ชฝ์ผ๋ก 1์นธ ์ด๋ : ๋งจ ๋ค์ ์์ ์ถ์ถํด์ 0๋ฒ์ ์ฝ์
์ค์ํ ํฌ์ธํธ๋ ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ผ ์ํ๋ ์์๋ฅผ ๋นจ๋ฆฌ ๋ฝ์์ง, ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์ผ ๋นจ๋ฆฌ ๋ฝ์์ง ์ ํํ๋ ๋ก์ง์ด์๋ค.
๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ 2๋ก ๋๋๋ค, Target์ด ์ผ์ชฝํํธ์ ์ํ๋์ง, ์ค๋ฅธ์ชฝ ํํธ์ ์ํ๋์ง ๋ถ๊ธฐํ์ฌ ํ์ ์ํฌ ๋ฐฉํฅ์ ์ ํ๋ฉด ๋๋ค.
#Code (Swift)
var nm = readLine()!.split(separator: " ").map{Int($0)!}
let n = nm[0], m = nm[1]
var targets = Array(readLine()!.split(separator: " ").map{Int($0)!})
var arr = Array(1...n)
var answer = 0
func rotate(_ direction: Int){
if direction == -1{
let temp = arr.removeFirst()
arr.append(temp)
}else{
let temp = arr.removeLast()
arr.insert(temp, at: 0)
}
}
func find(){
let target = targets[0]
let targetIdx = arr.firstIndex(of: target)!
if target == arr[0] {
targets.removeFirst()
arr.removeFirst()
}else if targetIdx > arr.count/2{
rotate(1)
answer += 1
}else{
rotate(-1)
answer += 1
}
}
while(!targets.isEmpty){
find()
}
print(answer)