import Foundation
func passCarCheck(inCar: Dictionary<String, Int>, outCar: inout [String]) -> Int{
var count = 0
while true{
for a in 0..<outCar.count - 2{
let b = a + 1
if inCar[outCar[a]]! > inCar[outCar[b]]!{
outCar.remove(at: a)
count += 1
}
}
if isSorted(inCar: inCar, outCar: outCar) {
break
}
}
return count
}
func isSorted(inCar: Dictionary<String, Int>, outCar: [String]) -> Bool{
for a in 0..<outCar.count - 2{
let b = a + 1
if inCar[outCar[a]]! > inCar[outCar[b]]!{
return false
}
}
return true
}
let carCount = Int(readLine()!)!
var inCar = Dictionary<String, Int>()
var outCar = [String]()
for i in 0..<carCount{
inCar[readLine()!] = i
}
for _ in 0..<carCount{
outCar.append(readLine()!)
}
print(passCarCheck(inCar: inCar, outCar: &outCar))
런타임에러남..
예상
import Foundation
func passCarCheck() -> Int{
var count = 0
if inCar.count <= 1 {
return 0
}
while true{
for i in 0..<outCar.count - 2{
if inCar[outCar[i]]! > inCar[outCar[i+1]]!{
outCar.remove(at: i)
count += 1
}
}
if isSorted() {
break
}
}
return count
}
func isSorted() -> Bool{
if outCar.count <= 1{
return true
}
for i in 0..<outCar.count - 2{
if inCar[outCar[i]]! > inCar[outCar[i+1]]!{
return false
}
}
return true
}
let carCount = Int(readLine()!)!
var inCar = Dictionary<String, Int>()
var outCar = [String]()
for i in 0..<carCount{
inCar[readLine()!] = i
}
for _ in 0..<carCount{
outCar.append(readLine()!)
}
print(passCarCheck())
그래도 런타임 에러남
백준의 런타임 에러의 종류는 다음과 같다고 한다
내 생각엔 배열 범위를 넘어가게 참조..아직 예외가 있는듯 하다.
디버깅을 하던 중 아예 로직이 잘못된것을 깨달았다
1. 2대일 경우 outCar.count -2 때문에 0이 출력됨.
2. outCar.count - 1이 맞는데, 이 경우 이전 진행되던 i 값과 outCar.count간의 논리적인 오류 발생
-> 내가 생각했던건 하나를 제외할때마다 처음부터 순서 확인을 해야하는 거였으므로, break를 추가해주었다.
import Foundation
func passCarCheck() -> Int{
var count = 0
while true{
if outCar.count <= 1{
return count
}
for i in 0..<outCar.count - 1{
if inCar[outCar[i]]! > inCar[outCar[i+1]]!{
outCar.remove(at: i)
count += 1
break
}
}
if isSorted() {
break
}
}
return count
}
func isSorted() -> Bool{
if outCar.count <= 1{
return true
}
for i in 0..<outCar.count - 1{
if inCar[outCar[i]]! > inCar[outCar[i+1]]!{
return false
}
}
return true
}
let carCount = Int(readLine()!)!
var inCar = Dictionary<String, Int>()
var outCar = [String]()
for i in 0..<carCount{
inCar[readLine()!] = i
}
for _ in 0..<carCount{
outCar.append(readLine()!)
}
print(passCarCheck())
맞았다~~
1시간동안 땅굴팜..^^