ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฉ๐ปโ๐ป ๋ฌธ์
10816๋ฒ: ์ซ์ ์นด๋ 2
์ฒซ์งธ ์ค์ ์๊ทผ์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ซ์ ์นด๋์ ๊ฐ์ N(1 โค N โค 500,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์ซ์ ์นด๋์ ์ ํ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ซ์ ์นด๋์ ์ ํ์๋ ์๋ -10,000,000๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10,
www.acmicpc.net


โ๐ป ํ์ด
๐จ Go
// https://www.acmicpc.net/problem/10816
// ์ด๋ถ ํ์์ผ๋ก ๊ฐ์ ๊ฐ์๋ฅผ ์ฐพ์ ๋ด
์๋ค.
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 cards = make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscanf(reader, "%d ", &cards[i])
}
sort.Ints(cards) // ์ ๋ ฌ
fmt.Fscanln(reader, &m)
var targets = make([]int, m)
for i := 0; i < m; i++ {
fmt.Fscanf(reader, "%d ", &targets[i])
fmt.Fprintf(writer, "%d ", upperBound(cards, targets[i])-lowerBound(cards, targets[i])+1)
}
fmt.Fprintln(writer, "")
}
// lowerBound: return the first occurrence of more than the desired value
func lowerBound(array []int, target int) int {
var startIdx, endIdx, midIdx int
endIdx = len(array) - 1
for startIdx < endIdx {
midIdx = (startIdx + endIdx) / 2
if array[midIdx] >= target {
endIdx = midIdx
} else {
startIdx = midIdx + 1
}
}
return endIdx
}
// upperBound: return the position where the value larger than the value
// you are looking for appears first.
func upperBound(array []int, target int) int {
var startIdx, endIdx, midIdx int
endIdx = len(array) - 1
for startIdx < endIdx {
midIdx = (startIdx + endIdx) / 2
if array[midIdx] > target {
endIdx = midIdx
} else {
startIdx = midIdx + 1
}
}
if array[endIdx] != target {
endIdx--
}
return endIdx
}
/*
// ํด์ ๋งต์ ์ด์ฉํ ํ์ด
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n, m int
fmt.Fscanln(reader, &n)
var cards = make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscanf(reader, "%d ", &cards[i])
}
cardMap := map[int]int{} // ๋งต ์ด์ฉํ์ฌ ํ๊ธฐ
for i := 0; i < len(cards); i++ {
key := cards[i]
cardMap[key]++
}
fmt.Fscanln(reader, &m)
var targets = make([]int, m)
for i := 0; i < m; i++ {
fmt.Fscanf(reader, "%d ", &targets[i])
fmt.Fprintf(writer, "%d ", cardMap[targets[i]])
}
fmt.Fprintln(writer, "")
}
*/
๐จ Python3
# https://www.acmicpc.net/problem/10816
# ์ด๋ถ ํ์์ผ๋ก ๊ฐ์ ๊ฐ์๋ฅผ ์ฐพ์ ๋ด
์๋ค.
import sys
import bisect
if __name__ == "__main__":
n = int(sys.stdin.readline())
cards = list(map(int, sys.stdin.readline().split()))
cards.sort() # ์ ๋ ฌ
m = int(sys.stdin.readline())
targets = list(map(int, sys.stdin.readline().split()))
for t in targets:
lower_bound = bisect.bisect_left(cards, t) # bisect ๋ชจ๋ ์ด์ฉ lower bound ๊ตฌํ๊ธฐ
upper_bound = bisect.bisect_right(cards, t) # bisect ๋ชจ๋ ์ด์ฉ upper bound ๊ตฌํ๊ธฐ
print(upper_bound - lower_bound, end=" ")
print()
728x90
'dev > algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ / 2805๋ฒ / ๋๋ฌด ์๋ฅด๊ธฐ [Go][Python3] (0) | 2020.11.21 |
---|---|
BOJ / 1654๋ฒ / ๋์ ์๋ฅด๊ธฐ [Go][Python3] (0) | 2020.11.20 |
BOJ / 1920๋ฒ / ์ ์ฐพ๊ธฐ [Go][Python3] (0) | 2020.11.17 |
BOJ / 1021๋ฒ / ํ์ ํ๋ ํ [Go][Python3] (0) | 2020.11.14 |
BOJ / 10866๋ฒ / ๋ฑ [Go][Python3] (0) | 2020.11.13 |
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
TAG
- ์คํ
- baekjoon
- dfs
- Algorithm
- ์๊ฐ๊ต์ฒด
- BOJ
- ํ
- dp
- ์ด๋ถํ์
- ๋ถํ ์ ๋ณต
- ํด์๋งต
- ๋ฐ๋
- MongoDB
- python3
- BFS
- ๋ธ๋ฃจํธํฌ์ค
- ๋งฅ๋ถ ์ ๊ทธ๋ ์ด๋
- ๋ชฝ๊ณ ๋๋น
- ์๋ฐ
- ballet
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก์ด๋์์ฌ
- ๋งฅ๋ถ
- ๋งฅ๋ถํ๋ก
- java
- Golang
- Macbook pro 2012 mid 13
- go
- ๋ฐฑ์ค
- AWS
- Total
- Today
- Yesterday