๐Ÿ’ฏ CodingTest/BaekJoon

[BaekJoon] 1081 ์ˆซ์ž ์นด๋“œ 2

S.Honey 2022. 4. 11. 09:36

[์ถœ์ฒ˜ : https://www.acmicpc.net/problem/10816]

 

โ— ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋‘๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋น„๊ตํ•ด ๋‘๋ฒˆ์งธ ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ์นด๋“œ์˜ ์ข…๋ฅ˜์—๋”ฐ๋ผ ์ฒซ๋ฒˆ์งธ ๋ฐฐ์—ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

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

cards.sort()
cardDic = {key : 0 for key in cards}

for t in cards:
    cardDic[t] += 1

keyList = sorted(list(cardDic.keys()) )

def binarySearch (data, num):
    low = 0
    high = len(data) - 1

    while low <= high:
        mid = (low + high) // 2
        if data[mid] == num :
            return True

        elif num > data[mid] :
            low = mid + 1

        elif num < data[mid] : 
            high = mid - 1
    return False

for t in cardType:
    if binarySearch(keyList, t) == True:
        print(cardDic[t],end=' ')
    else: 
        print(0, end=' ')

ํ’€์ด ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. ์ฃผ์–ด์ง„ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌ => ์ด ๊ณผ์ •์—์„œ ์ฒซ๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ์นด๋“œ ์ข…๋ฅ˜ ๊ฐ๊ฐ์˜ ์ˆ˜๋ฅผ ์„ธ์–ด cardDic์— ์ €์žฅ

2. ํšจ์œจ์„ฑ๋„ ๊ฐ™์ด ๊ณ ๋ คํ•ด์•ผ ํ–ˆ๊ธฐ์— ํƒ์ƒ‰๊ณผ์ •์—์„œ O(logN) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ์ด์ง„ ํƒ์ƒ‰ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„

3. ๋‘๋ฒˆ์งธ ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€ ์ด์ง„ํƒ์ƒ‰์„ ํ†ตํ•ด cardDic์— cardType์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จ

4. ๋งŒ์ผ ์žˆ๋‹ค๋ฉด ์ดˆ๊ธฐ cardDic์— ์ €์žฅํ–ˆ๋˜ ํ•ด๋‹น ์นด๋“œ ์ข…๋ฅ˜์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๊ณ , ์•„๋‹ˆ๋ผ๋ฉด 0์„ ์ถœ๋ ฅ