PS/백준

[Python] 11663번 선분 위의 점

s_omi 2024. 8. 5. 09:52

✏️ 문제

 

문제 파악

(큰 인덱스 - 작은 인덱스)를 출력해서 문제를 풀었는데

선분의 시작점이나 끝점이 점의 좌표와 같을 때 예상 값보다 1개씩 작게 나오는 문제가 있었다..

그래서 시작점이나 끝점 중 하나를 원래 인덱스 값보다 -1 해서 계산하면 출력이 잘 나오긴 한다...

근데 뭔가 야매로 푼 거 같아서 찝찝 ㅠ 했는데 다른 정답코드를 찾아보니 이런 식으로 나눠서 푸는 게 맞는 것 같다! 휴

 

알고리즘

  • 정렬
  • 이분 탐색

 

 

코드

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
point = sorted(list(map(int, input().split())))

def bs(ary, l, switch):
  start, end = 0, n-1
  i = -1

  while start <= end:
    mid = (start + end) // 2

    if ary[mid] <= l:
        i = (mid - 1 if switch == 1 and ary[mid] == l else mid)
        start = mid + 1
    else:
        end = mid - 1

  return i

for i in range(m):
  l1, l2 = map(int, input().split())
  i1, i2 = 0, 0
  i1 = bs(point, l1, 1)
  i2 = bs(point, l2, 2)
  print(i2 - i1)

 

 

 

 

 

 

'PS > 백준' 카테고리의 다른 글

[Python] 2792번 보석 상자  (0) 2024.08.07
[Python] 15810번 풍선 공장  (0) 2024.08.05
[Python] 2428번 표절  (0) 2024.08.05
[Python] 4158번 CD  (0) 2024.07.31
[Python] 13702번 이상한 술집  (0) 2024.07.31