이전의 코테에서 상당히 비슷한 문제를 풀었던 기억이 있다. 그때는 왜 그랬는지 모르겠지만, 힙을 사용해야겠다는 생각이 떠오르지 않았었다. 그래도 다행히 코테는 통과했었는데, 면접에서 어떤 식으로 더 최적화할 수 있겠냐는 질문이 듣지 마자 힙이 떠올랐었던 기억이 있다.
제곱의 합을 최소로 만들기 위해서는 가장 모난 놈부터 쳐내면 된다. 가장 모난 놈이라는건 여러 개의 숫자 중에서 가장 큰 놈이다. 반대로 최대로 만들기 위해서는 가장 작은놈부터 하면 될 것 같다. 가장 모난 놈을 쉽게 찾기 위해서는 Max Heap을 사용하면 되는데, 이는 C++ priority_queue라는 STL로 구현되어 있다.
우선 주어진 works 배열의 값들을 다 priorty_queue로 옮겨준다. 그 이후에 가장 큰 놈부터 빼서 -1을 하고 다시 큐에 넣는다. 이 작업을 n번 반복하면 된다. 그 사이에 0이 되어버리는 놈들은 다시 큐에 넣지 않는 예외 처리만 해주면 된다.
지금 준비 중인 코테가 프로그래머스 상에서 보길래 백준 문제를 풀다가 프로그래머스로 넘어왔다. 시험 시간이 2시간인 것으로 보아 난이도가 크게 어렵지는 않을 것 같은데 커트 라인이 높을 것으로 예상된다. 응시 가능 언어 중 Go도 있었다. Go로 문제를 풀면 조금 특이하지 않을까 싶어서 잠깐 고민했다. 하지만 Go를 마지막으로 사용한 지 한 달이 넘었고 일주일 만에 Go로 PS에 익숙해지기는 어렵지 않을까 생각해서 익숙한 C++로 도전하기로 했다.
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 단속카메라 (0) | 2022.10.04 |
---|---|
[프로그래머스] 단어 변환 (0) | 2022.10.02 |
[프로그래머스] 최고의 집합 (0) | 2022.10.01 |
[프로그래머스] 섬 연결하기 (2) | 2022.01.06 |
[프로그래머스] 정수 삼각형 (9) | 2022.01.04 |