https://softeer.ai/practice/9496
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
문자열
문제가 좀 복잡해보여서 해석하는 게 어려웠다.
자동차를 만드는 데, 자동차마다 필요한 단계 개수가 배열로 주어짐, 그리고 이 단계가 의미하는 건 결국 이 자동차를 만드는데 걸리는 시간임. 자동차들이 모두 만들어지는데 걸리는 최소시간을 출력하는 문제
접근방법
자동차가 생산되는데 5단계가 필요한 자동차는 1/5 만큼의 슬롯을 차지한다고 했음. 슬롯의 크기가 0-1 구간이어서, 1/5 슬롯을 차지하면 1초에 한칸씩 움직여서 이 전체 구간의 슬롯을 통과하는데 5초가 걸림. (단계 = 걸리는 시간)
따라서 모든 자동차가 안기다리고 바로바로 들어갈 수 있으면, 최종적으로 걸리는 시간은 마지막 자동차가 들어가는 시점 + 마지막 자동차가 걸리는 시간 이라는 간단한 식이 된다..
바로바로 들어갈 수 있으려면 슬롯의 큰 구간을 차지하는 것부터 들어가야 한다. 그래야 1초 후에 남은 구간에 그 다음 자동차 생산 슬롯이 들어갈 수 있기 때문(큰 구간을 차지하는 것부터 보냈으니까 그 다음부터는 이전 자동차가 지나간 공간보다는 작은 크기의 공정일 것임)
그리고 i 번째 자동차가 들어가는 시간은 i-1이다. (1번째 자동차가 들어가는 시간이 0초)
큰 구간을 차지하는 것부터 들어가기 때문에 필요한 단계가 적은 차부터 들어가야한다.
따라서 자동차들의 필요 단계가 담긴 배열을 오름차순으로 정렬하고, 마지막 자동차가 들어가는 시점은 N-1이 되고,
마지막 자동차가 만들어지는데 걸리는 시간은 cars[N-1]이 된다.
문제는 복잡했는데 수식으로 간단하게 해결되는 문제였음..
다만 foundation을 import할 수 없어서 components 메서드를 못쓰고 split 을 써야 한다는 걸 알아가게 돼
여기 문제 대부분 문자열 문제인가..?
소스코드
let N = Int(readLine()!)!
let input:String = readLine()!
var cars:[Int] = input.split(separator: " ").map { Int($0)! }
cars = cars.sorted()
print(N-1+cars[N-1])
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 16916] 부분 문자열 (Swift) (0) | 2025.02.06 |
---|---|
[백준 1197] 최소 스패닝 트리 (Swift) (0) | 2025.02.06 |
[Softeer] Yeah, but How? (Swift) (0) | 2025.02.04 |
[Softeer] 개표 (Swift) (0) | 2025.02.04 |
[softeer] GPT식 숫자비교 (C++) (1) | 2025.02.04 |