Notice
Recent Posts
Recent Comments
Link
CodeClover
[Python] 백준_26168 배열 전체 탐색하기 본문
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 |