-
2/28 기록 - 백준 9237Algorithm 2022. 2. 28. 11:25728x90
개강을 앞두고 앞으로 꾸준히 문제풀이를 할 수 있을지 모르겠지만, 오늘은 문제를 하나 풀어보았다.
백준 9237번 이장님 초대 문제이다.
문제를 처음에 이해하기가 꽤 어려웠다. 예제 입력2에서 특히 헷갈렸는데, 어디서 갑자기 42일이 나온건지 의문이 들었다. 최대한 이장님을 빨리 초대해야 하지만, 모두 다 심어 져야 하기 때문에, 정렬 후 MAX값을 구하는 문제로 받아들이면 된다.
문제부터 이해를 해보자.
예제 입력2에서 가장 빨리 이장님을 부르기 위해서는 오래 걸리는 묘목을 먼저 심어야 한다.
그렇다면
1일 2일 3일 4일 5일 6일
39 39 38 35 20 9
이런식으로 되면, 39일 걸리는 묘목을 1일째에 심고, 사는데 1일을 더하면 41일이 걸린다.
두번째 날 : 39일 + 2일 + 1일 = 42일
세번째 날 : 38일 + 3일 + 1일 = 42일
.....
이런식으로 보면 42일 째에는 이장님을 초대할 수 있게 된다.
이렇게 문제를 이해하고 나면, 정렬을 써야 한다는 것을 알 수 있다. 역순으로 내림차순 정렬을 하고, 그 값에서 묘목을 심는 날과 묘목을 사는 날을 더한 MAX값을 구하면 해결!!!
이렇게 해결을 할 수 있었다. 사는데 수는 1일로 default값이기 때문에 마지막에 더해주는 방식을 택했고, max 알고리즘에 arr[i]의 값을 반복적으로 더한 값을 입력해 주어 max값과 비교해서 출력시켜주었다.
이 문제를 풀면서 가장 의문이 들었던 점은 Arrays.sort 메소드를 사용하는 부분이었다. 내부에 Collections.reverseOrder()을 사용하려고 하니 계속 sort에 오류표시가 뜨는 현상이 발생해서 멘붕이 일어났다.
바로 지난번 문제에서 Collections.sort(arr, Collections.reverseOrder())를 사용할 때는 전혀 문제가 생기지 않았는데, Arrays.sort에서는 문제가 발생했다. 그래서 ArrayList를 선언하고 담아주는 방식도 생각해 보았지만, 잘 되지 않았는데 이부분에서 새로운 것을 발견할 수 있었다.
Arrays.sort()내부에 Collections를 사용할 때는 그 대상을 랩퍼 클래스로 만들어주어야 했다.
특이하게 Integer arr[] = new Integer[N]으로 배열을 선언해 준 것을 볼 수 있을 것이다.
이것이 랩퍼 클래스이고, Arrays.sort내부에 Collections메소드를 사용하고 싶다면 랩퍼 클래스로 만들어주어야 한다는 점을 기억하자!!!
2/28기록 끝!!!!!!!!
728x90'Algorithm' 카테고리의 다른 글
3/2기록 - 백준 2635 (0) 2022.03.02 3/2기록 - 백준 9655 (0) 2022.03.02 2/24기록 - 백준 7785 (0) 2022.02.24 2/23기록 - 백준 4796 (0) 2022.02.23 2/22기록 - 백준 1476 (0) 2022.02.22