-
https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%202470
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 용액 별로 특성 값이 주어지며 두 개의 용액을 더했을 때 합이 0에 가장 가까운 두 용액을
출력하는 문제다.
해당 문제는 투포인터를 이용해 해결했으며, 전형적인 투 포인터 문제인 거 같다.
먼저 입력처리를 통해 배열에 용액의 정보를 입력하여 준다. 이후 배열을 정렬해준다.
투포인터를투 포인터를 위해 시작부터 오름차순으로 만들기 위해, 이후 투 포인터를 하는데 먼저 처음과 끝의 인덱스를 저장하고
더한 값에대하 작은 값을 저장하기 위한 변수를 선언한 뒤,
반복문을 돌리는데 나는 그냥 처음과 끝 인덱스가 같지 않으면 반복하는 방식으로 짰고,
먼저 처음 sum변수에 현재 시작 끝 인덱스가 가리키는 배열 값을 저장한다.
이후 sum값을 절댓값을 취해 위에 저장하는 변수와 비교하는데 이때 더한값을 절대값을 취하는 이유는
작은 수로 비교하는데 음수가 들어가면 해당 값으로 변하기 때문에 절댓값을 취해 비교해준다.
어차피 -1이나 1은 같기 때문
이후 작으면 값들을 경신해주고 더한 값이 0이면 거기서 바로 리턴해준다
어차피 스페셜 저지 문제라서 정답의 경우가 여러 개이므로
그렇지 않으면 이제 sum이 0보다 작다면, start를 ++ 해주고 크다면 end를 --해주는 방식으로
중간으로 오도록 해서 문제를 해결했다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 12761 돌다리 JAVA (0) 2021.12.13 Baekjoon 18405 경쟁적 전염 JAVA (0) 2021.12.11 Baekjoon 14425 문자열 집합 JAVA (0) 2021.12.09 Baekjoon 16948 데스 나이트 JAVA (0) 2021.12.08 Baekjoon 14923 미로 탈출 JAVA (0) 2021.12.07 댓글