jbsam2   4년 전

숏코딩에서 다른 분들 알고리즘을 살펴보다가 아래 코드를 봤는데 어떤 원리 인지 이해가 잘 가지 않습니다. 혹시 설명해주실분 계신가요 ㅠㅠ

1207koo   4년 전

줄2는 잘 모르겠는데, main()안에 넣으면 매개변수처럼 선언되어서 int n, s, ... 이런 식으로 안 해도 되는 듯 합니다.

k배열이 의미하는 바는 k[i]: i-4000000가 합인 부분수열의 수(4000000가 더해지는 이유는 합이 음수일 수도 있기 때문일 겁니다.)

줄8-11: 기존의 부분수열에 a가 포함되는 경우도 추가해주는 겁니다. a의 부호에 따라 더해지는 방향이 달라야 합니다. k[a+j]+=k[j]라는 식에서 k[j]가 0~i-1에 대해서 제대로 값을 저장해야만 가능한 방식입니다.

줄12: a만 있는 부분수열에 대한 걸 추가해주는 겁니다. 그러면 합이 a니까 k[a+4000000]++가 되겠죠

줄14: 합이 s인 위치는 s+4000000

jbsam2   4년 전

@1207koo 8-11 부분에서 a 부호에 따른 부분이 헷갈렸었는데 해결 되었습니다! 감사합니다.

ckddn1224   3년 전

이코드 시간초과가 안나나요 ???

댓글을 작성하려면 로그인해야 합니다.