본문 바로가기
알고리즘 문제풀이

[Softeer] Pipelined (Swift)

by SiO2whocode 2025. 2. 5.
728x90

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])
728x90