본문 바로가기
알고리즘/BOJ

[BOJ] 2470번 두 용액 / 사용언어 : 파이썬(python)

by 바른 호랑이 2022. 2. 26.
728x90
반응형

※ 문제링크

 

2470번: 두 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00

www.acmicpc.net

해당 문제는 투 포인터와 관련된 문제로 2개의 포인터를 사용해서 값을 체크하고 조건에 충족하면 갱신하는 식으로 해결할 수 있는 문제였다. 용액의 성질을 리스트에 저장하고, 정렬한 후 좌측끝과 우측끝 각각 포인터를 지정하고 값을 확인하는 방식으로 문제를 해결했으며, 자세한 풀이방법과 코드는 아래와 같다.

1. 입력받은 값을 리스트와 변수로 지정하여 저장한다.

2. 용액들의 성질을 저장한 리스트를 오름차순으로 정렬한 후 왼쪽 끝과 오른쪽 끝에 각각 포인터를 지정해준다.

3. 정답을 저장한 ans 변수를 리스트형태로 저장하고, while문을 이용하여 갱신해준다.

4. 두개의 용액을 섞은 값의 절댓값이 ans의 값보다 작으면 ans를 갱신해주고, 용액을 섞은값이 0보다 크면 오른쪽 포인터에 -1을, 0보다 작으면 왼쪽 포인터에 +1을 해준다. 왼쪽 포인터가 오른쪽 포인터와 같아지면 반복문을 종료한다.

5. 반복문 종료 후 갱신된 값을 출력해준다.

 

N = int(input())
solutions = list(map(int, input().split()))
solutions.sort()
cp1 = 0
cp2 = N-1

ans = [float('inf'), [float('inf'), float('inf')]]
while cp1 < cp2:
    solution = [solutions[cp1], solutions[cp2]]
    check_value = sum(solution)
    if abs(check_value) < ans[0]:
        ans[0] = abs(check_value)
        ans[1] = solution
    if check_value < 0:
        cp1 += 1
    if check_value >= 0:
        cp2 -= 1
print(*ans[1])

 

P.S 더 나은 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글