Fact
- 처음엔 for 써서 sort한후에 하나씩 더해주고 값을 바꿔 주는 식으로 했다. 그러나 짠 후에 제출을 하니 통과가 안됬다. 보니깐 조건을 제대로 안 읽고 문제를 풀었다. 조건에서 최소 숫자 2개를 써서 계산하는거였는데 나는 안일하게 sort를 한후에 그냥 앞에 것들을 계속 더 하고 수정 하고 있었다. 더한 후에 수정을 하면 그 수가 뒤에것 보다 클수도 있는데… 그래서 있던거 수정 해서 넣어 볼려고 하니깐 시간 초과 떠서 버리고 새로 짰다. 새로 짤때 priority queue를 썼다.priority queue에 내장 함수에 poll이랑 peek와 add를 쓸 수 있었다. 내장 함수들을 쓰니 엄청 편하게 풀었다.
- for 돌려돌려로 끝내고 싶었지만, 이게 조건이 하나 더 붙어서 결국엔 while을 두번 돌려돌려 했다.
거기에다가 list까지 썼다.
또한 배열에 요소 하나 더 추가 하기 위해서 새로운 배열을 만들어서 복사를 해서 넣었다.
그 넣는 작업으로 인하여 3줄이나 더 썼다. JavaScript는 그냥 push하면 끝일텐데… 여윽시 JavaScript.
그리고 마지막으로 코드를 제출했었는데 시간 초과가 떴었다. 그래서 포맷 정렬등을 하니깐 통과가 되었다.
물어보니 jvm compile할때 문제가 생겨서 error이 떴을 수도 있다고 했다. 아무튼 들여쓰기 하나 없애니깐 통과가 됬다. - 문익점 2주차 1번 스텝 완료 했다.
Feelings
- 정규식 너무 어렵다.
Findings
- priority queue에 내장 함수에 poll이랑 peek와 add를 쓸 수 있었다.
poll은 queue의 head를 뽑는데 뽑게 되면 그 queue에 있는 최소값을 뽑아준다(원본 queue에서 뽑은 최소값은 없어진다). peek는 최소값을 가져온다.
add는 말 그래도 추가하는데 이때 추가 하게되면 priority queue의 특성에 맞게 맞는 위치에 추가한다. 예를들어서 queue 가1,2,4 이고 add(3)을 하면 1,2,3,4가 된다고 한다. 참고로 System.out.print(queue) 하면 정렬된 채로 나오지 않는다. 아무래도 메서드를 쓸때 알맞게 뽑는것 같음…
아래는 jshell에서 쳐본 명령어들이다.
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(List.of(1,2,11,4))
queue ==> [1, 2, 11, 4]
queue.add(3)
$11 ==> true
queue
queue ==> [1, 2, 11, 4, 3]
queue.add(2)
$13 ==> true
queue
queue ==> [1, 2, 2, 4, 3, 11]
jshell> queue.poll()
$15 ==> 1
jshell> queue.poll()
$16 ==> 2
jshell> queue.poll()
$17 ==> 2
jshell> queue.poll()
$18 ==> 3
jshell> queue.poll()
$19 ==> 4
jshell> queue.poll()
$20 ==> 11
jshell> queue.poll()
$21 ==> null
보시다시피 queue를 찍어보면 정렬된 상태로 안나오지만 poll로 계속 뽑아 보면 head(여기선 최소값)을 잘 뽑아 온다.
Future Action
- 정규식 너무 어려운데 그래도 효용성이 좋아서 공부 많이 하고 자주 쓰도록 하자.