[코딩테스트] 🪑상어 초등학교 - 백준 21608
2025. 10. 1. 18:38ㆍ알고리즘
문제링크
난이도
골드 5
유형
구현
소요시간
1시간
회고
풀만했는데 문제 해석을 초반에 잘 못해서 헤맴. 인접 거리에 대한 해석을 대각선도 포함인줄 알았다. 문제를 우선 잘 보자!
코드
struct Info {
let l: Int
let e: Int
let r, c: Int
}
typealias Seat = (i: Int, n: Set<Int>)
let N = Int(readLine()!)!
var students: [[Int]] = Array(repeating: Array(repeating: 0, count: 5), count: N*N)
var seats: [[Seat]] = Array(repeating: Array(repeating: (0, []), count: N), count: N)
(0..<N*N).forEach { i in
students[i] = readLine()!.split(separator: " ").map { Int($0)! }
}
let dr = [-1, 0, 1, 0]
let dc = [0, 1, 0, -1,]
students.forEach { row in
let student = row[0]
let likes = Set(row[1..<5])
var infoList = [Info]()
var maxEmpty = 0
var maxLikes = 0
(0..<N).forEach { r in
(0..<N).forEach { c in
var likeCount: Int = 0
var emptyCount: Int = 0
if seats[r][c].i != 0 { return }
(0..<4).forEach { k in
let nr = r + dr[k]
let nc = c + dc[k]
if nr < 0 || nr >= N || nc < 0 || nc >= N { return }
if seats[nr][nc].i == 0 {
emptyCount += 1
} else if likes.contains(seats[nr][nc].i) {
likeCount += 1
}
}
let info = Info(l: likeCount, e: emptyCount, r: r, c: c)
infoList.append(info)
}
}
let sorted = infoList.sorted { l, r in
if l.l != r.l {
return l.l > r.l
} else if l.e != r.e {
return l.e > r.e
} else if l.r != r.r {
return l.r < r.r
} else {
return l.c < r.c
}
}
let info = sorted.first!
seats[info.r][info.c] = (student, likes)
}
var answer = 0
(0..<N).forEach { r in
(0..<N).forEach { c in
var acc = 0
let likes = seats[r][c].n
(0..<4).forEach { k in
let nr = r + dr[k]
let nc = c + dc[k]
if nr < 0 || nr >= N || nc < 0 || nc >= N { return }
if likes.contains(seats[nr][nc].i) { acc += 1 }
}
answer += score(acc)
}
}
func score(_ s: Int) -> Int {
switch s {
case 4: return 1000
case 3: return 100
case 2: return 10
case 1: return 1
default: return 0
}
}
print(answer)
'알고리즘' 카테고리의 다른 글
| [코딩테스트 + 성능 회고] 🎯 양궁대회 - Kakao 2023 (0) | 2025.10.03 |
|---|---|
| [코딩테스트] 🐷 포현 가능한 이진 트리 - KAKAO 2023 (0) | 2025.10.03 |
| [코딩테스트]🍗치킨 배달 - 백준 15686 (0) | 2025.09.30 |
| [코딩테스트] 🔥 마법 상어의 파이어볼 - 백준 20056 (0) | 2025.09.30 |
| [코딩테스트] 💨 미세 먼지 제거 - 백준 17144 (1) | 2025.09.26 |