CodeClover

[Python] 백준_26168 배열 전체 탐색하기 본문

코딩테스트

[Python] 백준_26168 배열 전체 탐색하기

coding dew 2025. 4. 23. 17:11

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

📌 문제 탐색하기 / 코드 설계하기

입력받는 배열에 대해서 여러가지 조건에 맞는 원소의 개수를 구하는 문제이다.
정렬이 되어 있지 않은 무작위 값을 입력 받기 때문에 빠른 계산을 위해서 정렬을 처리하고 -> 1-3번까지 3가지 조건에 맞춰서 .. 해당 조건을 만족하는 원소 개수를 구해야함........🥹

📌 가능한 시간복잡도

멘토님표 시간복잡도..

📌 정답 코드

import sys
# 1. 문제의 input을 받습니다.
n, m = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))

# 2. 이분탐색을 위해 배열을 정렬합니다.
arr.sort()

# 3. 유형 1에 대한 이분탐색을 구현합니다.
def command_1(k):
    low = 0
    high = n - 1
    result = n  # 만약 모든 값이 k보다 작다면 반환될 인덱스

    while low <= high:
        mid = (low + high) // 2
        if arr[mid] >= k:
            result = mid  # k 이상인 값이 나왔으니, result를 갱신
            high = mid - 1  # 더 왼쪽에도 k 이상인 값이 있을 수 있으니 계속 탐색
        else:
            low = mid + 1

    return n - result  # 전체 길이에서 result를 빼면 k 이상인 원소 개수

# 4. 유형 2에 대한 이분탐색을 구현합니다.
def command_2(k):
    low = 0
    high = n - 1
    result = n  # 만약 모든 값이 k보다 작다면 반환될 인덱스

    while low <= high:
        mid = (low + high) // 2
        if arr[mid] > k:
            result = mid  # k 이상인 값이 나왔으니, result를 갱신
            high = mid - 1  # 더 왼쪽에도 k 이상인 값이 있을 수 있으니 계속 탐색
        else:
            low = mid + 1

    return n - result  # 전체 길이에서 result를 빼면 k 이상인 원소 개수

# 5. 유형 3에 대한 이분탐색을 구현합니다.
def command_3(i, j):
    return command_1(i) - command_2(j)

# 6. 질의를 순차적으로 탐색하며 결과를 출력합니다.
for _ in range(m):
    cmd = list(map(int, sys.stdin.readline().split()))
    if cmd[0] == 1:
        print(command_1(cmd[1]))
    elif cmd[0] == 2:
        print(command_2(cmd[1]))
    elif cmd[0] == 3:
        print(command_3(cmd[1], cmd[2]))

우와,,, 정답입니다. 아니고 100점.. 결과도 있는지 처음 알았다..!! 
멋진 멘토님 코드처럼 나도 스스로 100점을 받을 수 있는 그날까지..더더 열심히 해야지...!!!!

'코딩테스트' 카테고리의 다른 글

[JAVA] 백준_17608 막대기  (0) 2025.04.25
[JAVA] 백준_1343 폴리오미노  (0) 2025.04.24
[JAVA] 백준_2828 사과 담기 게임  (0) 2025.04.22
[JAVA] 백준_2810 컵홀더  (0) 2025.04.21
[JAVA] 백준_14916 거스름돈  (0) 2025.04.20