BOJ-1946, 신입 사원
문제 📑
https://www.acmicpc.net/problem/1946
문제 정리 ▾
- 테스트 케이스의 개수를 입력받는다.
- 지원자의 수를 입력받는다.
- 지원자는 서류심사 성적과 면접 성적의 순위를 각각 공백 기준으로 입력받는다.
- 다른 지원자들의 서류심사 성적과 면접 성적을 비교하여 다른 지원자들에 비해 두 성적 모두 낮을 경우 떨어진다.
- 해당 회사에 선발할 수 있는 신입사원의 최대 인원수를 출력한다.
접근 🚶🏻
나의 생각 ▾
- 신입 사원들의 성적들을 2차원 배열로 입력을 받아 서류심사 성적을 정렬하고, 면접 성적을 각각 비교하여 카운팅 하여 결과를 출력시키려고 했다.
내 코드(시간 초과 코드) ▾
import Foundation
func solution() {
for _ in 0..<Int(readLine()!)! {
let cnt = Int(readLine()!)!
var people: [[Int]] = []
var standard: Int = 0
var result: Int = 1
for _ in 0..<cnt {
people.append(readLine()!.split(separator: " ").map({Int(String($0))!}))
}
let people_srt = people.sorted(by: { $0[0] < $1[0] })
standard = people_srt[0][1]
for score in people_srt {
if standard > score[1] {
standard = score[1]
result += 1
}
}
print(result)
}
}
solution()
- 분명 돌리면 올바른 출력값이 나오지만, 시간 초과라는 채점 결과가 나온다..
- Swift는 2014년에 시작이 되었는데, 역사가 너무 짧아서 그런지 가끔 이런 현상이 발생한다고 한다. (C++은 1985년이라고 한다..)
내 코드(시간초과 이슈 해결) ▾
import Foundation
final class FileIO {
private var buffer:[UInt8]
private var index: Int
init(fileHandle: FileHandle = FileHandle.standardInput) {
buffer = Array(fileHandle.readDataToEndOfFile())+[UInt8(0)]
index = 0
}
@inline(__always) private func read() -> UInt8 {
defer { index += 1 }
return buffer.withUnsafeBufferPointer { $0[index] }
}
@inline(__always) func readInt() -> Int {
var sum = 0
var now = read()
var isPositive = true
while now == 10
|| now == 32 { now = read() }
if now == 45{ isPositive.toggle(); now = read() }
while now >= 48, now <= 57 {
sum = sum * 10 + Int(now-48)
now = read()
}
return sum * (isPositive ? 1:-1)
}
@inline(__always) func readString() -> String {
var str = ""
var now = read()
while now == 10
|| now == 32 { now = read() }
while now != 10
&& now != 32 && now != 0 {
str += String(bytes: [now], encoding: .ascii)!
now = read()
}
return str
}
}
func solution() {
let file = FileIO()
for _ in 0..<file.readInt() {
let cnt = file.readInt()
var scores: [(Int, Int)] = []
var standard: Int = 0
var result: Int = 1
for _ in 0..<cnt {
scores.append((file.readInt(), file.readInt()))
}
scores.sort { $0.0 < $1.0 }
standard = scores[0].1
for i in 0..<scores.count {
if standard > scores[i].1 {
standard = scores[i].1
result += 1
}
}
print(result)
}
}
solution()
- 이렇게 하니 아래와 같이 통과할 수 있었다.. 😒
Addtional 📂
- 가끔 Swift로 알고리즘 공부를 하다 보면 시간 초과가 떴었는데 위와 같은 방법으로 해결을 할 수 있을 것 같다.
- 저 코드를 만들어주신 라이노님 감사합니다 😂
'Algorithm.zip' 카테고리의 다른 글
[Swift]BOJ-1744 (0) | 2022.04.07 |
---|---|
[Swift]BOJ-16953 (0) | 2022.04.06 |
[Swift]BOJ-1026 (0) | 2022.04.04 |
[Swift]BOJ-11726 (0) | 2022.02.07 |
[Swift]BOJ-17298 (0) | 2022.02.05 |