- Today
- Yesterday
- Total
메이쁘
(JAVA) 백준 2470번 : 두 용액 본문
https://www.acmicpc.net/problem/2470
그놈의 시간 초과 때문에 (제한시간 1초)
그리고 나만의 이진 탐색 방법을 사용하려고 하다보니
예외가 계속 나와서 그거 해결하느라 시간이 오래걸렸다.
결국에는
내 탐색 알고리즘으로 문제를 해결했으나..
*** 실제 이진탐색을 사용하는 방법도 있다.
베스트 정답을 보니
이렇게 쉽게 풀 수 있는 방법이 있었어?
생각이 들며
이 방법을 공부했다.
*** 정말 감사합니다.. 알고리즘 굇수님들..
그래서
필자가 처음에 구현한 알고리즘 이 아닌
베스트 효율적인 알고리즘을 포스팅하겠다.
핵심은 그렇다.
1) 음수, 양수가 섞인 배열을 우선 오름차순 정렬한다.
그렇게 되면 맨 왼쪽은 가장 낮은 음수, 맨 오른쪽은 가장 큰 양수가 자리하게 되고,
가운데로 갈수록 점점 절댓값은 작아질 것이다.
2) 그래서 양 끝부터 시작해서 탐색을 진행한다.
왼쪽 index를 i , 오른쪽 index를 j 라고 할 때
i -> <- j
로 진행하며 i가 j보다 커지기 전까지 while문을 만족하는 반복문을 짠다.
3) 그래서 i의 원소와 j의 원소의 합(어떻게 말하면 두 원소 사이의 길이)의 절댓값을 저장하며
이전에 계산했던 절댓값보다 큰지 작은지 비교한다.
만약 이전 절댓값보다 작은 경우
정답에 가까워지기 때문에
이 두 원소를 별도 저장해두고, 위 절댓값을 이번에 계산해서 나온 절댓값으로 갱신한다.
이를 위 while문 조건을 벗어날 때 까지 반복한다.
그렇게해서 나온 결과가 정답이다.
?
그렇게해서 나온 별도로 저장한 두 원소가
모든 원소들 중 임의로 선택한 두 원소의 차가 0에 가장 가까운 두 원소라는 뜻이다!
간단한 문제를...
아직 부족하다고 느낀다.
소스코드를 하단에 첨부하겠습니다.
오늘도 항상 웃는 하루가 되었으면 좋겠습니다.
감사합니다! :)
소스코드
'Algorithm > Baekjoon' 카테고리의 다른 글
(JAVA) 백준 4195번 : 친구 네트워크 (0) | 2020.05.31 |
---|---|
(JAVA) 백준 10775번 : 공항 (0) | 2020.05.29 |
(JAVA) 백준 10711번 : 모래성 (0) | 2020.05.28 |
(JAVA) 백준 2804번 : 크로스워드 만들기 (0) | 2020.05.26 |
(JAVA) 자바 16570번 : 앞뒤가 맞는 수열 (0) | 2020.05.26 |