Coding Test
백준 11286번 절대값 힙
big whale
2022. 12. 31. 13:24
문제 간단 설명
1. N개의 정수를 입력받는다.
2-1. 도중에 입력으로 0이 들어오면 저 지금까지 들어온 숫자 중에서 절대값이 가장 작은 수를 출력해준다.
2-2. 만약 절대값이 같은 수가 존재한다면(1과 -1과 같이), 실제 값이 더 작은 수를 출력해준다.(-1 출력)
시행착오
arr[i][0]에는 절댓값 i의 음수 개수를, arr[i][1]에는 절댓값 i의 양수 개수를 저장해서 풀이를 하려고 했다. 하지만 입력값이 -2의 31승 ~ 2의 31승 인 점을 고려해서 arr의 1차원의 크기를 1<<31 - 1로 해줬더니 컴파일시에 너무 크다면서 오류가 발생했다.
정답
priority_queue 는 비교하는 방식을 커스텀할 수 있다는 걸 알았다. 하지만 간단히 함수를 넣어서 비교할 수 있는게 아니라 cmp 클래스에서 operator를 오버라이팅한 후 cmp 클래스를 넘겨주는 방식이어서 복잡했다.
operator 에서 a, b가 인자로 들어온다. 만약 false를 리턴하면 순서가 a, b 그대로고, true를 리턴하면 b, a의 순서가 된다. -1, 4가 인자로 들어왔을 시 return abs(-1) > abs(4) == false 이므로 순서는 그대로이다.
2, -2가 인자로 들어왔을 시 return 2 > 0 && -2 < 0 == true 이므로 입력과 반대 순서로 swap된다.