import Foundation
let n = Int(readLine()!)!
let num = n * n
let level = [0, 1, 10, 100, 1000]
var chair = Array(repeating: Array(repeating: -1, count: n + 2), count: n + 2)
var point = Array(repeating: Array(repeating: 0, count: 4), count: num)
var result = 0
for i in 1...n {
for j in 1...n {
chair[i][j] = 0
}
}
for _ in 0..<num {
let input = readLine()!.components(separatedBy: " ").map {Int($0)!}
let student = input[0]
let like = input[1...4]
for i in 0..<4 {
point[student - 1][i] = input[i + 1]
}
var arr:[Int] = []
for i in 1...n {
for j in 1...n {
if chair[i][j] == 0 {
var p = 0
if like.contains(chair[i][j - 1]) {
p += 10
}
if like.contains(chair[i - 1][j]) {
p += 10
}
if like.contains(chair[i + 1][j]) {
p += 10
}
if like.contains(chair[i][j + 1]) {
p += 10
}
if chair[i][j - 1] == 0 {
p += 1
}
if chair[i - 1][j] == 0 {
p += 1
}
if chair[i + 1][j] == 0 {
p += 1
}
if chair[i][j + 1] == 0 {
p += 1
}
arr.append(p)
} else {
arr.append(-1)
}
}
}
if let index = arr.firstIndex(of: arr.max()!) {
let i = index / n
let j = index % n
chair[i + 1][j + 1] = student
}
}
for i in 1...n {
for j in 1...n {
var count = 0
let num = chair[i][j] - 1
if point[num].contains(chair[i][j - 1]) {
count += 1
}
if point[num].contains(chair[i - 1][j]) {
count += 1
}
if point[num].contains(chair[i + 1][j]) {
count += 1
}
if point[num].contains(chair[i][j + 1]) {
count += 1
}
result += level[count]
}
}
print(result)
n을 입력 받으면 n+2 짜리 배열 chair를 만들어 줌 (-1로 초기화)
좋아하는 친구 4명을 저장할 point 배열 만듬
chair에서 테두리 제외하고 0으로 초기화 해줌
-1 | -1 | -1 | -1 | -1 |
---|---|---|---|---|
-1 | 0 | 0 | 0 | -1 |
-1 | 0 | 0 | 0 | -1 |
-1 | 0 | 0 | 0 | -1 |
-1 | -1 | -1 | -1 | -1 |
주변 비교를 할 때 boundary는 예외처리를 해줘야 하는데, 그게 귀찮아서 테두리를 하나 만듬
입력을 받음 4 2 5 1 7
student = 4, like = [2, 5, 1, 7]
point[4] 에 좋아하는 친구들 [2, 5, 1,7] 저장
for 루프를 돌면서 주변 4개의 자리에 대해 확인함
빈 자리 이면
자리가 안 비었으면 (else 문)
p = -1
arr에 결과값 저장
arr에서 가장 큰 값의 index를 고른다. (i, j)
chair[i + 1][j + 1] 에 현재 학생 student 값을 넣어준다.
chair 에 대해 for 문을 돈다
주변에 좋아하는 친구들의 수를 센다. → point 배열에서 가져와 비교
좋아하는 수에 따라 level 배열에서 점수를 불러온다. let level = [0, 1, 10, 100, 1000]
result에 합쳐준다.