알고리즘/baekjoon

[백준/파이썬] 친구 네트워크, 수 찾기, SHA-356

jungeun960 2021. 6. 18. 22:45

유형별 문제 풀이 - 고급 자료구조 - 03. 핵심 유형 문제풀이

# 친구 네트워크 (골드2)

-> 문제유형 : 그래프, 해시, 집합, 유니온 파인드

import sys
input = sys.stdin.readline
def FindRoot(x):
    if x == parent[x]:
        return x
    else:
        p = FindRoot(parent[x])
        parent[x] = p
        return parent[x]

def Union(a,b):
    x = FindRoot(a)
    y = FindRoot(b)
    if x != y:
        parent[y] = x
        number[x] += number[y]

tc = int(input())
for _ in range(tc):
    num = int(input())
    parent = {}
    number = {}
    for _ in range(num):
        x,y = list(input().split())
        if x not in parent:
            parent[x] = x
            number[x] = 1
        if y not in parent:
            parent[y] = y
            number[y] = 1
        Union(x,y)
        print(number[FindRoot(x)])

 

# 1920 수 찾기 (실버4)

-> 문제유형 : 해시, 배열, 구현

point. 특정 정수의 등장 여부만을 체크하면 된다면 set이나 dictionary를 사용하라 -> 여기서는 key값만 필요하고 value값은 필요없으니 set으로

n = int(input())
array = set(map(int, input().split()))
m = int(input())
m_list = list(map(int,input().split()))

for i in m_list:
    if i in array:
        print(1)
    else:
        print(0)

※ dictionary : 키와 값을 값는 데이터 구조, 키는 내부적으로 hash 값으로 저장됨

※ set : dictionary에서 key만 활용하는 데이터 구조, 수학에서 집합과 도일한 개념

 

# 10930 SHA-356 (브론즈2)

-> 문제유형 : 해시, 구현

import hashlib
input_data = input()
encoded_data = input_data.encode()
result = hashlib.sha3_256(encoded_data).hexdigest()
print(result)

 

 

반응형