-
Notifications
You must be signed in to change notification settings - Fork 5
Minjeong / 4월 4주차 / 3문제 #200
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
Conversation
YoonYn9915
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이번 발제 문제와 과제 문제 모두 잘 풀어주신것 같습니다.
과제 문제는 N이 5000개까지이므로 O(N log N)의 시간복잡도를 사용할 수 있는 문제였습니다. 따라서 선형으로 O(N) 시간복잡도를 써서 세 용액중 하나를 고정시켜놓고, 발제문제에서 사용한 투 포인터 알고리즘으로 O(log N) 시간 복잡도를 써서 나머지 용액 중 절댓값이 0에 가장 가까운 두 용액을 찾으면 되는 문제였습니다.
한 주 수고하셨습니다!!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 i를 고정한 뒤에 left는 0부터 right는 N-1부터 시작하게 했는데 민정님 코드 보니까 left를 i+1로 해도 되겠네요.
민정님이 리뷰 남겨주신 아래 부분도 left가 0부터 시작하니 i가 left나 right와 같아질 수도 있어서 추가한 거거든요.
if left == i:
left = i + 1
continue
elif right == i:
right = i - 1
continueThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그렇군요!! 윤상님처럼 접근할 수 있다는 점 참고해야겠네요!!
zaqquum
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이번주 고생하셨습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 세 용액 총합의 최소값을 INF로 설정했는데 민정님은 첫번째 경우의 합으로 설정하셨네요. 초기화는 필수가 아닌 이상 저는 설정하지 않고 그냥 사용했던 것 같습니다.
그래도 민정님처럼 중간값, 세 용액 조합 리스트 같이 아래에서 새로 대입하는 변수지만 위에서 초기화 하고 사용하는 것이 가독성과 변수 활용에 용이해 보이네요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
감사합니다!
🔥2025-04 챌린지 진행 상황👉 그래프
👉 DP
|
🌱WIL
#2470. 두 용액문제는 비슷한 유형을 여러 번 풀어본 덕분에 비교적 수월하게 해결할 수 있었다. 그러나#2473. 세 용액문제는 세 개의 값을 찾아야 해서 처음에 좀 헤맸다. 처음 접근할 때는 세 개의 포인터(left,mid,right)를 동시에 관리하려 했지만, 문제를 풀다 보니 이 방식은 일부 조합을 시도조차 하지 않는다는 단점이 있다는 것을 알게 되었다. 이 문제를 통해, 세 값을 구해야 할 때는 하나의 값을 고정(i)하고, 나머지 두 값을 투포인터로 관리해야 한다는 점을 배웠다. 또, 다른 분들의 블로그 코드를 참고하다 보니 시간 초과가 발생하는 경우도 있었는데, 그 원인을 분석해볼 수 있었다.#5107. 마니또문제는 잊고 있었던 유니온 파인드 알고리즘을 복습할 수 있는 좋은 기회였다. 기존에는 숫자로 표현된 그래프를 주로 다뤘지만, 이번 문제는 "이름"을 기반으로 접근해야 해서 처음에는 많이 헷갈렸다. 그래도 덕분에 유니온 파인드 개념을 다시 정리할 수 있어 의미 있는 시간이었다.🚀주간 목표 문제 수: 3개
백준 #2470. 두 용액: 투포인터 / 골드5
정리한 링크: (바로가기)
🚩플로우 (선택)
전체 용액의 수
N과 용액의 특성값을 저장할 리스트liquid를 입력받고 정렬한다.left,right투 포인터를 초기화한다.answer와answer_liquid의 초기값을 설정한다.left와right가 교차할 때까지 아래 과정을 반복한다.temp에 저장해둔다.temp가 0에 더 가까우면 정답을 갱신한다temp가 음수이면left += 1,temp가 양수이면right -= 1로 포인터를 이동한다.while반복문 종료 후 정답을 출력한다.🚩제출한 코드
💡TIL
백준 #2473. 세 용액: 투포인터 / 골드3
정리한 링크: (바로가기)
🚩플로우 (선택)
i)를 고정i다음 인덱스를left로, 마지막 인덱스를right로 설정left와right가 교차하면 종료🚩제출한 코드
💡TIL
left,mid,right)를 동시에 관리”**하려고 했다. 이렇게 하면 일부 조합의 경우를 시도하지 않고 넘어가기 때문에 정확한 답을 낼 수 없다는 것을 알게 되었다. 이 문제처럼 3개의 값을 구해야 하는 투포인터의 유형의 경우 하나를 고정값(ex.i)으로 두고, 나머지 2개를 포인터로 설정해야 한다는 것을 알게 되었다.sys.maxsize를 사용하면 시간초과가 날 수 있다는 것을 알게 되었다.*를 붙여 출력하면 한 칸씩 간격을 두고 출력할 수 있다.백준 #5107. 마니또: 그래프 / 실버1
정리한 링크: (바로가기)
🚩플로우 (선택)
N = 0일 때 종료)manito딕셔너리를 만든다.parent배열을 set으로 변환해 그룹 수를 세고 출력한다.🚩제출한 코드
💡TIL