๋ฌธ์
๋ฐฑ์ค ์ซ์์นด๋ 2
https://www.acmicpc.net/problem/10816
์ฝ๋
N = int(input())
cards = sorted(list(map(int, input().split())))
M = int(input())
want_card = (list(map(int, input().split())))
count = {}
for card in cards:
if card in count:
count[card] += 1
else:
count[card] = 1
def binarySearch(arr, target, start, end):
if start > end:
return 0
mid = (start + end) // 2
if arr[mid] == target:
return count.get(target)
elif arr[mid] < target:
return binarySearch(arr, target, mid + 1, end)
else:
return binarySearch(arr, target, start, mid - 1)
for target in want_card:
print(binarySearch(cards, target, 0, len(cards) - 1), end=" ")
ํ์ด
N = int(input())
cards = sorted(list(map(int, input().split())))
M = int(input())
want_card = (list(map(int, input().split())))
์ ๋ ฅ์กฐ๊ฑด์ ๋ง๊ฒ ์ ์ธํ๋ค.
์ด๋ถํ์์ ์งํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ cards ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.
count = {}
for card in cards:
if card in count:
count[card] += 1
else:
count[card] = 1
count ๋์ ๋๋ฆฌ๋ฅผ ์์ฑํ๋ค.
card์ ์๋ ์ซ์์นด๋๋ค์ด ๋ช๊ฐ ์๋์ง์ ์ ๋ณด๊ฐ ๋ด๊ธด ๋์ ๋๋ฆฌ๋ค.
ex)
card = [-10, -10, 2, 3, 3, 6, 7, 10, 10, 10] ๋ผ๋ฉด
count = {-10: 2, 2: 1, 3: 2, 6: 1, 7: 1, 10: 3} ์ด๋ค.
(์ฌ๊ธฐ์๋ถํฐ ์์๋ฅผ ์ด์ง ๋ฐ๊ฟจ๋ค. ์ฝ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์ค๋ช ํ๋๊ฒ ์๋๋ผ ์คํ๋ ํจ์๋ฅผ ๋ค์์ ์ค๋ช ํ๋ค.)
for target in want_card:
print(binarySearch(cards, target, 0, len(cards) - 1), end=" ")
์ํ๋ ์นด๋๋ฅผ ํ๋์ฉ ๋ฝ์ ํด๋น ์นด๋๊ฐ cards๋ฐฐ์ด์ ๋ช๊ฐ์๋์ง ์ด๋ถํ์์ ํ ํ ์ถ๋ ฅํ๋ค.
def binarySearch(arr, target, start, end):
if start > end:
return 0
mid = (start + end) // 2
if arr[mid] == target:
return count.get(target)
elif arr[mid] < target:
return binarySearch(arr, target, mid + 1, end)
else:
return binarySearch(arr, target, start, mid - 1)
๋งค๊ฐ๋ณ์๋ก
arr์ cards ๋ฐฐ์ด,
target๋ for๋ฌธ์ผ๋ก ํ๋์ฉ ๋ฝ์ ์ํ๋ ์นด๋,
start์ end๋ ์ด๋ถํ์์ ์ฌ์ฉ๋ ํฌํฌ์ธํฐ๋ค.
mid๋ start์ end์ ์ค๊ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ค.
๋ง์ฝ mid๊ฐ ๊ฐ๋ฆฌํค๋๊ณณ์ด ์ํ๋ ์นด๋์ ํด๋น๋๋ฉด, count ๋์ ๋๋ฆฌ์์ ํด๋น ์นด๋์ ๊ฐฏ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
๋ง์ฝ mid๊ฐ ๊ฐ๋ฆฌํค๋๊ณณ์ด ์ํ๋ ์นด๋๋ณด๋ค ์๋ค๋ฉด, start ํฌ์ธํฐ๋ mid + 1 ๋ก ์ฎ๊ธด๋ค.
๋ง์ฝ mid๊ฐ ๊ฐ๋ฆฌํค๋๊ณณ์ด ์ํ๋ ์นด๋๋ณด๋ค ํฌ๋ค๋ฉด, end ํฌ์ธํฐ๋ mid - 1 ๋ก ์ฎ๊ธด๋ค.
์ด๋ ๊ฒ start์ endํฌ์ธํฐ๋ฅผ ์ฎ๊ธฐ๋ฉฐ ๋ฒ์๋ฅผ ์ขํ๊ฐ๋ค๊ฐ, start์ end ํฌ์ธํฐ๊ฐ ๊ต์ฐจ๋๋ฉด, ์ด๋ถํ์์ผ๋ก cards ๋ฐฐ์ด์ ๋ชจ๋ ํ์ํด๋ ์ํ๋ ์นด๋๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก, 0์ ๋ฐํํ๋ค.
๋ ๋์ ์ฝ๋
N = int(input())
cards = sorted(list(map(int, input().split())))
M = int(input())
want_card = list(map(int, input().split()))
count = {}
for card in cards:
if card in count:
count[card] += 1
else:
count[card] = 1
for target in want_card:
print(count.get(target, 0), end=" ")
์ด๋ถํ์์ ์ฌ์ฉํ์ง์๊ณ , ๋์ ๋๋ฆฌ๋ง ์ฌ์ฉํ์๋ค.
๋น์ฐํ ์คํ์๋๋ ๋ ๋น ๋ฅด๋ค.
ํ์ด
N = int(input())
cards = sorted(list(map(int, input().split())))
M = int(input())
want_card = list(map(int, input().split()))
count = {}
for card in cards:
if card in count:
count[card] += 1
else:
count[card] = 1
์์ ์ฝ๋์ ๋น๊ตํด์ ํด์(๋์ ๋๋ฆฌ) ์์ฑ๊น์ง๋ ๋๊ฐ๋ค.
for target in want_card:
print(count.get(target, 0), end=" ")
์ํ๋ ์นด๋๋ฅผ ํ๋์ฉ ๋ฝ์ ํด๋น ์นด๋๊ฐ cards๋ฐฐ์ด์ ๋ช๊ฐ์๋์ง get() ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ์ํ๋ ์นด๋๊ฐ cards ๋ฐฐ์ด์ ์๋ค๋ฉด, 0์ ์ถ๋ ฅํ๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด์ / ๋๋์
- dictionary์์ value๋ฅผ ๊ฐ์ ธ์ฌ๋ ์ธ๋ฑ์ค๋ก ํค๊ฐ์ ๊ฐ์ ธ์ฌ๋, ํด๋น ํค ๊ฐ์ด ์๋ค๋ฉด, KeyErorr๊ฐ ๋๋ค. get() ํจ์๋ฅผ ์จ์ผ์ง ์์ธ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ํค ๊ฐ์ ์ ๊ทผํ ์ ์๋ค.
- (๋์ ๋๋ฆฌ).get((ํค ๊ฐ), (ํค๊ฐ ์์๋ ๋ฆฌํดํ ๋ํดํธ ๊ฐ))
- ํค๊ฐ ์์๋ ๋ฆฌํดํ ๋ํดํธ๊ฐ์ ๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก None์ ๋ฐํํ๋ค.
- ex ) count.get(11, 0) โก๏ธ count ๋์ ๋๋ฆฌ์ 11์ ํด๋นํ๋ ํค๊ฐ์ ๋ฐํํ๋ค. ๋ง์ฝ ํด๋น ํค๊ฐ์ด ์๋ค๋ฉด 0์ ๋ฐํํ๋ค.
๋ ๋์ ์๊ฒฌ์ด๋ ๊ถ๊ธํ์ ๊ฒ ์๋ค๋ฉด ํธํ๊ฒ ๋๊ธ ๋ฌ์์ฃผ์ธ์ :)
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ๋ฆฌ๋ชจ์ปจ (0) | 2024.06.16 |
---|---|
[๋ฐฑ์ค] ๊ฐ์ํ๋ ์ (0) | 2024.06.15 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ตญ์ฌ์ฌ (0) | 2024.06.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ (0) | 2024.05.30 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์นดํซ (0) | 2024.05.28 |