dev/algorithm
BOJ / 1920λ² / μ μ°ΎκΈ° [Go][Python3]
crscnt
2020. 11. 17. 21:00
π©π»π» λ¬Έμ
1920λ²: μ μ°ΎκΈ°
첫째 μ€μ μμ°μ N(1≤N≤100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ Nκ°μ μ μ A[1], A[2], …, A[N]μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ M(1≤M≤100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ Mκ°μ μλ€μ΄ μ£Όμ΄μ§λλ°, μ΄ μλ€μ΄ Aμ
www.acmicpc.net
βπ» νμ΄
π¨ Go
// https://www.acmicpc.net/problem/1920
// λ°°μ΄μ μ λ ¬ν ν μ΄λΆ νμμΌλ‘ κ°μ μ°Ύμ λ΄
μλ€.
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n, m int
fmt.Fscanln(reader, &n)
var a = make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscanf(reader, "%d ", &a[i])
}
fmt.Fscanln(reader, &m)
var b = make([]int, m)
for i := 0; i < m; i++ {
fmt.Fscanf(reader, "%d ", &b[i])
}
sort.Ints(a) // μ λ ¬
for i := 0; i < m; i++ {
if binarySearch(a, b[i]) {
fmt.Fprintln(writer, 1)
} else {
fmt.Fprintln(writer, 0)
}
}
}
// binarySearch
// array: sorted array
// val: value to be searched
func binarySearch(array []int, val int) bool {
low := 0 // lower bound
high := len(array) - 1 // upper bound
for low <= high {
mid := (low + high) / 2
if array[mid] < val {
low = mid + 1
} else {
high = mid - 1
}
}
if low == len(array) || array[low] != val {
return false
}
return true
}
π¨ Python3
# https://www.acmicpc.net/problem/1920
# λ°°μ΄μ μ λ ¬ν ν μ΄λΆ νμμΌλ‘ κ°μ μ°Ύμ λ΄
μλ€.
import sys
import bisect
if __name__ == "__main__":
n = int(sys.stdin.readline())
a = list(map(int, sys.stdin.readline().split()))
a.sort() # μ λ ¬
m = int(sys.stdin.readline())
b = list(map(int, sys.stdin.readline().split()))
for v in b:
i = bisect.bisect_left(a, v) # bisect λͺ¨λ μ΄μ©νμ¬ μ΄λΆνμ
if i < len(a) and a[i] == v:
print(1)
else:
print(0)
cf. μ΄λΆνμ(μ΄μ§νμ)μ μκ°λ³΅μ‘λ = O(logN)
728x90