Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

boj 2473 세 용액 #32

Closed
java-saeng opened this issue Oct 7, 2021 · 3 comments
Closed

boj 2473 세 용액 #32

java-saeng opened this issue Oct 7, 2021 · 3 comments

Comments

@java-saeng
Copy link

java-saeng commented Oct 7, 2021

강사님 안녕하십니까
드디어 두 포인터 마지막 문제입니다.
이 문제를 일주일 전에 틀려서 풀이를 봤지만 이해가 안 가서,
강의를 다시 보고 왔지만 모르겠습니다..

image

  1. int target = -A[i] 인 점이 궁금합니다.

다른 풀이들을 보면 target = A[i] 그대로 사용하면서
sum = target + A[L] + A[R] 로 하고, sum > 0 이면 R--, sum < 0이면 L++
이런 식으로 풀었습니다.

강사님 풀이를 이해하기 위해 손으로 다 써보았는데,
제가 예상하기로는 target을 - 로 쓴 이유가 R과 L을 옮기는 것 때문에 쓰시는 것 같습니다.

어떻게 보면

//다른 풀이
if ( A[L] + A[R] + target > 0)  

//강사님 풀이
if( A[L] + A[R] > target )

둘 풀이는 같습니다. 강사님은 target을 -target으로 생각해서 결국 왼쪽으로 이항시키면 위 식과 같아지는 것은 알겠습니다..

그런데 왜 이렇게 풀 수 있는지 제 자신이 납득이 안되는 것 같습니다...

예를 들어 두 용액에서는
최대 + 최소 > 0 이나 < 0일 때, 최대 입장이나 최소 입장으로 강사님께서 말씀해주신 부분은 완벽한 납득이 됐습니다.
그런데 위 문제는 A[L} + A[R] 이 target과 무슨 연관이 있는지, 왜 저렇게 두 포인터들을 이동할 수 있는지 모르겠습니다.

두서 없는 질문 정말 죄송합니다..

@java-saeng
Copy link
Author

무엇을 모르는지 알 것 같습니다.
좋다 라는 문제에서는
A[L] + A[R] 이 target보다 작으면
최소 입장에선 최대를 더했는데 target보다 작기 때문에 s를 늘려야한다
라는 명확한 로직이 이해가 됐는데
세 용액에서는 왜 target을 - 로 하며 ,

더했을 때 양수가 나오면 R을 줄여야하는지 모르겠습니다. 단지 양수가 나오면 0에 가까워지기 위해 R을 줄이는 것인가요?

@rhs0266
Copy link
Owner

rhs0266 commented Oct 8, 2021

i번 용액을 확실히 고른 상태에서 L과 R을 선택하고 싶은 거잖아요? 그럼 이 순간 L과 R을 구하는 건 두 용액 문제와 동일해졌다는 의미로 말한 거에요.

두 용액 문제에서 "두 개의 용액을 더해서0에 가깝게 만들어라" 를 이번 문제에서는 "두 개의 용액을 더해서 -A[i]에 가깝게 만들어라"로 만든거죠. -A[i]에 가까워야 A[i]랑 더했을 때 0에 가까워지니까요. 같은 이유로, 두 용액에서 합이 목표(0)보다 크냐 작냐로 L과 R을 이동시켰잖아요? 그래서 이번에도 동일하게 수행한 겁니다.

@java-saeng
Copy link
Author

이번 문제에서는 "두 개의 용액을 더해서 -A[i]에 가깝게 만들어라"로 만든거죠.

으어.. 이것이었습니다 ㅠㅠㅠ 호석님..
감사합니다 바로 AC 받으러 가겠습니다

@rhs0266 rhs0266 closed this as completed Oct 9, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants