맞는데 왜 틀릴까..?

알고리즘 문제/이진 탐색, 투 포인터, 정렬 5

[Java] 이진 탐색 (나무 자르기)

나름대로 Time Complexity를 생각해서 배열을 정렬하고 첫 번째 인덱스의 나무와 두 번째 인덱스의 나무의 차를 계산하면서 총합을 더해갔는데 계속 틀려서 다른 방법을 생각했다. 배열을 정렬하지 않고 이진탐색을 이용하는 방법인데, 주어진 배열과 수가 커서 알맞은 방법인 것 같다. 나무 중에서 가장 길이가 긴 나무의 높이를 top, 바닥을 down으로 두고 위아래로 이진 탐색을 진행한다. 만약 높이가 middle일 때 모든 (나무 높이-middle)의 합이 구하고자 하는 높이와 같다면 답이 구해진다. 위와 같이 숫자가 정확히 나누어 떨어지지 않는다면 middle이 아니고 middle-1이 답일 것이다. 숫자의 범위가 매우 클 떄 이진탐색을 고려해 보자. https://www.acmicpc.net/pr..

투 포인터 (수들의 합2)

투 포인터의 약간의 변형 문제 두개의 포인터가 양 끝쪽이 아니라 모두 왼쪽에서 부터 시작하는 문제이다. 생각보다 인덱스의 범위, left right의 인덱스 등등 헷갈리는게 많았다. 보기엔 쉬워보이지만 직접 작성해보니 생각보다 어려운 문제. 처음 작성한 코드는 아래와 같은데 위 처럼 매 순간 마다 모든 구간을 sum한다면 투 포인터의 의미가 없어져 버린다는 것을 인지하지 못했었다.

투 포인터, 예외 처리 (로봇 프로젝트)

입출력에 대한 이해가 어려웠던 문제 테스트케이스를 입력으로 주지 않는 문제 파이썬의 try except를 사용해 풀었다. try는 에러가 일어나지 않을 때 작동하는 코드, except는 에러가 발생 했을 때 작동하는 코드이다. N의 최대 개수가 1000000이므로 정렬 후 투 포인터로 가장 왼쪽 값과 오른쪽 값을 더해 target X와 일치 할 때 결과를 result에 저장하고 함수를 종료한다.