[Python] 7795. 먹을 것인가 먹힐 것인가

2023. 4. 27. 09:38·study/백준(BOJ)
728x90

https://www.acmicpc.net/problem/7795

 

7795번: 먹을 것인가 먹힐 것인가

심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을

www.acmicpc.net

 

접근법

  • 이분 탐색을 통해 A의 원소가 B의 원소보다 큰 값의 경우의 수를 찾음.
  • 이분 탐색을 통해 timeout이 나지 않도록 함.
def input_func():
    a_num, b_num = map(int, input().split())
    a_arr = list(map(int, input().split()))
    b_arr = list(map(int, input().split()))
    a_arr.sort()
    b_arr.sort()
    return a_arr, b_arr

def solution2(a_arr, b_arr):
    count = 0
    for a in a_arr:
        tmp_count = 0
        start, end = 0, len(b_arr) - 1
        while start <= end:
            mid = (start + end) // 2
            if b_arr[mid] < a:
                tmp_count = mid + 1
                start = mid + 1
            else:
                end = mid - 1
        count += tmp_count
    print(count)

def main():
    T = int(input())
    for i in range(T):
        a_arr, b_arr = input_func()
        solution2(a_arr, b_arr)

if __name__ == '__main__':
    main()


유의할 점 및 새로 배운 사항

1. bisect 라이브러리

bisect 라이브러리를 활용하면 이분 탐색을 쉽게 풀 수 있다.

 


처음 생각했던 알고리즘의 문제점(틀린이유)

더보기

try1

(1) 모든 원소를 탐색하니 timeout이 걸림 -> 이분 탐색 활용

def input_func():
    a_num, b_num = map(int, input().split())
    a_arr = list(map(int, input().split()))
    b_arr = list(map(int, input().split()))
    a_arr.sort()
    b_arr.sort()
    return a_arr, b_arr

def solution(a_arr, b_arr):
    count = 0
    for i in a_arr:
        for j in b_arr:
            if i > j:
                count += 1
            else:
                break
    print(count)

def main():
    T = int(input())
    for i in range(T):
        a_arr, b_arr = input_func()
        solution(a_arr, b_arr)

if __name__ == '__main__':
    main()

사용된 알고리즘

정렬, 이분 탐색, 두 포인터

728x90

'study > 백준(BOJ)' 카테고리의 다른 글

[Python] 16234. 인구 이동  (0) 2023.04.29
[Python] 2110. 공유기 설치  (0) 2023.04.27
[Python] 27211. 도넛 행성  (0) 2023.04.25
[Python] 23351. 물 주기  (0) 2023.04.25
[Python] 27922. 현대모비스 입사 프로젝트  (0) 2023.04.19
'study/백준(BOJ)' 카테고리의 다른 글
  • [Python] 16234. 인구 이동
  • [Python] 2110. 공유기 설치
  • [Python] 27211. 도넛 행성
  • [Python] 23351. 물 주기
bbooo
bbooo
  • bbooo
    bbooo
    bbooo
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • study (61)
        • 백준(BOJ) (34)
        • Programmers (15)
        • LeetCode (9)
      • AI (4)
        • Paper (0)
      • SSAC X IFFEL (4)
        • DeepML (1)
        • 밑바닥 부터 시작하는 딥러닝 (2)
      • 회고 (46)
      • Error (10)
      • Setting (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Counter
    파이썬 과제 진행하기
    백준
    python 석유시추
    풀이 실패
    python 과제 진행하기
    sequence item 0: expected str instance int found
    개발자 취업
    99클럽
    두 포인터
    프로그래머스 석유시추
    파이썬
    vscode
    투포인터
    코딩테스트 준비
    set
    programmers 과제 진행하기
    브루트포스
    LeetCode
    파이썬 석유시추
    programmers 석유시추
    docker
    백준 2470
    typeerror: sequence item 0: expected str instance int found
    그리디 알고리즘
    sort
    항해99
    문자열을 원하는 길이로
    백트래킹
    Til
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
bbooo
[Python] 7795. 먹을 것인가 먹힐 것인가
상단으로

티스토리툴바