본문 바로가기

알고리즘/🥇 골드

백준 2467 용액 파이썬 풀이

728x90

난이도 : 골드5

풀이일 : 2401254

https://www.acmicpc.net/problem/2467

 

2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이 코드

import sys

N = int(sys.stdin.readline())
liquid = list(map(int, sys.stdin.readline().split()))

front = 0
rear = N - 1

numL = liquid[front]
numR = liquid[rear]
mini = abs(numL + numR)

while front < rear:
    temp = liquid[front] + liquid[rear]
    if abs(temp) < mini:
        numL = liquid[front]
        numR = liquid[rear]
        mini = abs(temp)

        if temp == 0:
            break

    if temp < 0:
        front += 1

    else:
        rear -= 1

print(numL, numR)
  • liquid : 주어지는 용액 정보 저장
  • front : 왼쪽 인덱스
  • rear : 오른쪽 인덱스
  • numL : 특성 값이 0에 가까워지는 조합의 왼쪽 수
  • numR: 특성 값이 0에 가까워지는 조합의 오른쪽 수
  • front가 rear 보다 작은 동안 반복하며 두 인덱스 수를 더해 그 절대값 탐색
  • 절댓값이 현재 최소치보다 작다면, numL, numR, mini를 갱신
  • 절댓값이 음수라면 front += 1
  • 절댓값이 양수라면 rear -= 1

느낀점

  • 간단한 문젠데 날림으로 풀어서 다섯 번이나 틀리고 풀었다. 눈을 제대로 뜨고 내 코드 한 줄 한줄의 의미를 생각하면서 알고리즘을 풀도록 하자
  • 여행중에 한국 시간 맞춰 문제 풀고 커밋하기 너무 신경쓰인다.