728x90
https://www.acmicpc.net/problem/9489
각 노드들의 son, parent를 딕셔너리로 기록하고 사촌의 수를 찾았다.
import sys; input = sys.stdin.readline
def find_sibling(me, son, parent):
p, grand_p = None, None
if parent.get(me):
p = parent[me]
if parent.get(p):
grand_p = parent[p]
if grand_p:
answer = 0
for p_brother in son[grand_p]:
if not son.get(p_brother): continue
answer += len(son[p_brother])
return answer - len(son[p])
return 0
def main():
while 1:
N, K = map(int, input().split())
if N == 0 and K == 0:
break
nums = list(map(int, input().split()))
son, parent = {}, {}
# parent[nums[0]] = None
p = -1
for i in range(1, len(nums)):
if nums[i - 1] + 1 != nums[i]:
p += 1
if not parent.get(nums[i]):
parent[nums[i]] = 0
parent[nums[i]] = nums[p]
if not son.get(nums[p]):
son[nums[p]] = set()
son[nums[p]].add(nums[i])
print(find_sibling(K, son, parent))
if __name__ == '__main__':
main()
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 20208 진우의 민트초코우유 python(pypy), C++ (0) | 2022.01.12 |
---|---|
[백준] 1718 암호 python (0) | 2022.01.12 |
[백준] 20365 블로그 2 python (0) | 2022.01.11 |
[백준] 1668 트로피 진열 python (0) | 2022.01.11 |
[백준] 1956 운동 python(pypy) (0) | 2022.01.10 |