8711번 Odchudzanie | 뭐라도 하겠지

8711번 Odchudzanie

이왜틀?


img01

8711번 Odchudzanie - 백준

int n=Integer.parseInt(br.readLine());
StringTokenizer st=new StringTokenizer(br.readLine()," ");
long a=Long.MAX_VALUE;
long b=1;
long i=1;
while(st.hasMoreTokens()){
    long t=Long.parseLong(st.nextToken());
    if(a>t) {
        a=t;
        b=i;
    }
    i++;
}
bw.write(b+"");

뭐지? 뭔짓을 한거야
내 소스를 이해를 못하겠다.

설계


가장 큰 구간 차이를 계산해야한다.
단순히 min max 값 구하는 걸로는 안되고
시간의 흐름이 있기 때문에 최고값을 갱신하며 현재 무게와의 차를 계산한다.

구현


n이 3 * 10^6이라 제법 크다.
저만큼 연산을 해야한다는 뜻.
그냥 input()을 사용하니 메모리 초과가 나서 sys.stdin을 사용하고
PyPy가 퍼포먼스가 더 잘나올 것 같으니 PyPy로 돌린다.

import sys

n = int(sys.stdin.readline())

max, result = 0, 0
w = map(int, sys.stdin.readline().split())

for k in w:
    if max < k:
        max = k
        
    # 지금까지의 최대 무게와 현재 무게의 비교
    if max - k > result:
        result = max - k
        
print(result)

채점


img02

반성


드디어 처음으로 PyPy로 제대로 제출해본건가?

코드 확인


Link to GitHub

Updated: