제가 스위프트를 사용하는 건 아니라서 직접적인 도움을 드리진 못 합니다만, 스위프트가 입출력이 상당히 느린 편이고, 이를 빠르게 하는 데에도 불편함이 상당한 데에 비해, 백준에서 스위프트에 대해 추가 시간을 주지 않는 것으로 알고 있습니다.
만약 입출력 속도를 향상시키기 위한 트릭을 사용하지 않으셨다면 (잘 모르지만 그래 보입니다) 한번 스위프트 빠른 입출력에 대해 알아보시고 적용해보는 게 좋을 것 같습니다.
10989번 - 수 정렬하기 3
빠른 입출력을 적용하니 20ms 차이로 아슬아슬하게 통과가 됩니다. ( 빠른 입출력 소스 코드 주소 )
입출력이 10~20만 줄 넘어가면 Swift는 빠른 입출력을 쓰는 것을 권장합니다.
그리고 해당 문제처럼 출력할 양이 많으면 일일이 print 해주는 것보다 String 타입인 output 변수를 output += "\(answer)\n"해서 마지막에 한 번에 출력하는 것이 더 빠릅니다.
이와 별개로 7번째 줄, 16번째 줄, 20번째 줄, 21번째 줄에 있는 a.count를 호출할 때마다 O(n) 시간이 소요됩니다. ( 이는 count가 배열 원소를 일일이 세기 때문입니다. )
또한, 10번째 줄 a.max()도 마찬가지로 호출할 때마다 O(n) 시간이 소요됩니다. ( count와 마찬가지로 max()도 배열 원소를 일일이 비교합니다. )
결론적으로 빠른 입출력을 하지 않았기 때문에 시간 초과가 난 것은 맞지만, 작성자님이 써주신 알고리즘은 다소 비효율적인 것으로 보입니다.
댓글을 작성하려면 로그인해야 합니다.
santoo 2년 전
이건 뭐... 정석대로 알고리즘을 짠거 같아서 어디서 시간복잡도가 증가한건지 알 수가 없네요. 고수분들 답변 부탁드립니다 ^^