20366. 같이 눈사람 만들래

·2025년 7월 19일
0

백준 알고리즘

목록 보기
198/272

알고리즘 문제 해결 전략

  • 문제를 읽으면 , 600C4를 해야하는 것인가? 생각이 든다.
    그러면

  • 조합 공식에 따르면 이건데.
    600! / 596! * 4!

  • 내 생각에는 그냥 600! 599! 597! * 596! 이다.
    즉 위의 시간복잡도와 동일하다.

-> 즉 완탐으로는 불가하다.

어떻게 해야할까?

  • 나열된 수를 오름차순으로 정렬한 후, 4개의 값을 추출해서
    눈사람 2개를 만들고, diff 값 중에서의 최소값을 구하는문제다.

  • 숫자를 입력해서 생각해봤다.

1) 1 100 100 200 이라고 한다면 diff 이니까.
(1 ,100) (100, 200) 보다는 (1, 200) (100,100) 선택하는 것이 최선이다.

2) 1 100 100 1000000 이라고 한다면
(1 ,1000000) (100 100) 이 최선이다.

결론
-> 가운데거를 따로 처리하는 것보다 가운데거를 합쳐서 큰 친구와
비교하는 차이를 구하는 정책에 있어서 최선이다.

알고리즘 문제 해결 전략

  • 끝 점 2개를 정해 눈사람1 만들고, 그 사이에 점들을 이용해서
    눈 사람2를 만들어서 diff 구하는 방식으로 생각함.

  • 처음에는 이렇게 생각했는ㄷ

  • 굳이 복잡하게 하지말고, 순차적으로 해도 상관없을 듯 해서
    이렇게 했다.

  • 투포인터 구하는 부분.
    : 아래 내용 중요하다.

  • 처음에는 sstart와 eend 이동 처리를 어떻게 할까?diff 로 할까? 생각했는데... diff로 하기에는 절대값이기 때문에 sstart와 eend 이동하는 부분이 부정확하다 판단해서 result 구하는 거 따로 이동하는 거 따로 진행했다.
profile
🔥🔥🔥

0개의 댓글