Algorithms/Algorithms

λ°±μ€€ 이뢄탐색 λ¬Έμ œλ“€ (1072 κ²Œμž„, 1654 λžœμ„ μžλ₯΄κΈ°, 1920 수찾기, 2512 μ˜ˆμ‚°)

탱저 2021. 11. 12. 10:03

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

 

1072번: κ²Œμž„

κΉ€ν˜•νƒμ€ μ§€κΈˆ λͺ°λž˜ Spider Solitaire(μŠ€νŒŒμ΄λ” μΉ΄λ“œλ†€μ΄)λ₯Ό ν•˜κ³  μžˆλ‹€. ν˜•νƒμ΄λŠ” 이 κ²Œμž„μ„ 이길 λ•Œλ„ μžˆμ—ˆμ§€λ§Œ, 질 λ•Œλ„ μžˆμ—ˆλ‹€. λˆ„κ΅°κ°€μ˜ μ‹œμ„ μ΄ λŠκ»΄μ§„ ν˜•νƒμ΄λŠ” κ²Œμž„μ„ μ€‘λ‹¨ν•˜κ³  코딩을 ν•˜κΈ° μ‹œ

www.acmicpc.net

import sys
input = sys.stdin.readline
x, y = map(int, input().split())

z = int(100 * y / x)

if z >= 99:
    print(-1)
else:
    ans = 0
    start = 0
    end = 1000000000
    while(start <= end):
        mid = (start + end) // 2
        if int(100 * (y + mid) / (x + mid)) <= z:
            start = mid + 1
        else:
            end = mid - 1
    print(end + 1)

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

 

1654번: λžœμ„  자λ₯΄κΈ°

첫째 μ€„μ—λŠ” μ˜€μ˜μ‹μ΄ 이미 가지고 μžˆλŠ” λžœμ„ μ˜ 개수 K, 그리고 ν•„μš”ν•œ λžœμ„ μ˜ 개수 N이 μž…λ ₯λœλ‹€. KλŠ” 1이상 10,000μ΄ν•˜μ˜ μ •μˆ˜μ΄κ³ , N은 1이상 1,000,000μ΄ν•˜μ˜ μ •μˆ˜μ΄λ‹€. 그리고 항상 K ≦ N 이닀. κ·Έ

www.acmicpc.net

# λžœμ„ μ˜ 길이 κ΅¬ν•˜κΈ°
# λžœμ„ μ˜ 길이 움직여 λžœμ„  개수 μ±„μš°λŠ”μ§€ 보기

k, n = map(int, input().split())
lan = [int(input()) for _ in range(k)]

start = 1
end = max(lan)

while(start <= end):
    mid = (start + end) // 2
    count = 0
    for i in lan:
        count += (i // mid)
    if count >= n:
        start = mid + 1
        result = mid
    else:
        end = mid - 1

print(result)

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

 

1920번: 수 찾기

첫째 쀄에 μžμ—°μˆ˜ N(1 ≤ N ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” N개의 μ •μˆ˜ A[1], A[2], …, A[N]이 주어진닀. λ‹€μŒ μ€„μ—λŠ” M(1 ≤ M ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” M개의 μˆ˜λ“€μ΄ μ£Όμ–΄μ§€λŠ”λ°, 이 μˆ˜λ“€

www.acmicpc.net

import sys
input = sys.stdin.readline

n = int(input())
a = list(map(int, input().split()))
m = int(input())
b = list(map(int, input().split()))

a.sort()
result = []

for i in b:
    start = 0
    end = n - 1
    flag = 0
    while(start <= end):
        mid = (start + end) // 2
        if i < a[mid]:
            end = mid - 1
        elif i > a[mid]:
            start = mid + 1
        elif i == a[mid]:
            flag = 1
            break
    result.append(flag)

for i in result:
    print(i)

이 λ¬Έμ œλŠ” ν•΄μ‹œλ‘œλ„ ν•΄κ²°κ°€λŠ₯ν•˜λ‹€. 검색이 μš©μ΄ν•œ ν•΄μ‹œ!

import sys 
input = sys.stdin.readline

n = map(int, input()) 
a = list(map(int, input().split())) 

pool = {} 
for k in a: 
    pool[k] = 1 

m = map(int, input()) 
b = list(map(int, input().split())) 
for t in b: 
    if t in pool:
        print(1) 
    else: 
        print(0)

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

 

2512번: μ˜ˆμ‚°

첫째 μ€„μ—λŠ” μ§€λ°©μ˜ 수λ₯Ό μ˜λ―Έν•˜λŠ” μ •μˆ˜ N이 주어진닀. N은 3 이상 10,000 μ΄ν•˜μ΄λ‹€. λ‹€μŒ μ€„μ—λŠ” 각 μ§€λ°©μ˜ μ˜ˆμ‚°μš”μ²­μ„ ν‘œν˜„ν•˜λŠ” N개의 μ •μˆ˜κ°€ λΉˆμΉΈμ„ 사이에 두고 주어진닀. 이 값듀은 λͺ¨λ‘ 1 이상

www.acmicpc.net

import sys
input = sys.stdin.readline

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

start = 1
end = max(bud)

while(start <= end):
    count = 0
    mid = (start + end) // 2
    for i in bud:
        if i <= mid:
            count += i
        else:
            count += mid
    if count <= m:
        start = mid + 1
    else:
        end = mid - 1

print(end)

 

728x90