Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

우주에서 글을 적어본다

99클럽 코테 스터디 14일차 TIL + 이분 탐색 본문

항해99 TIL

99클럽 코테 스터디 14일차 TIL + 이분 탐색

우주로 날아간 사람 2024. 8. 4. 20:07

[오늘의 학습 키워드 및 문제]
- 백준의 "숫자 카드 2" 문제를 풀었다.
- 어제와 비슷한 같은 입력의 비슷한 문제였다.
- 오늘도 여러 가지 풀이 방법으로 풀어봤다.

[나의 코드]

# 첫 번째 풀이

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

m = int(input())
holded = list(map(int, input().split()))

result = {}

for num in given:
    if num not in result:
        result[num] = 1
    else:
        result[num] += 1

for num in holded:
    if num in result:
        print(result[num], end=' ')
    else:
        print(0, end=' ')

첫 번째 풀이는 해시를 이용한 풀이법이다.
설명하게 더 있나 싶다.

# 두 번째 풀이

import bisect

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

m = int(input())
holded = list(map(int, input().split()))

given.sort()

result = []

# 이분 탐색으로 각 숫자의 개수 찾기
for num in holded:
    left_index = bisect.bisect_left(given, num)
    right_index = bisect.bisect_right(given, num)
    result.append(right_index - left_index)

print(' '.join(map(str, result)))

두 번째 풀이는 이분 탐색 풀이법이다.
이번 문제는 조건이 달라져서 생으로 구현할 경우 코드가 미친 듯이 길어진다.
그렇기 때문에 bisect라는 라이브러리를 사용했다.
참고로 bisect는 이진 탐색을 구현할 수 있게 해주는 라이브러리다.

[오늘의 회고]
- 어제와 비슷한 문제였지만, 조건이 달라질 때 달라지는 코드에 적응을 해볼 수 있는 좋은 경험이었다.
- 근데 오늘은 대충 썼다. 다른 거 좀 바빠서... 끝!