상봉동개발자

[백준] 10866, 13023, 11724 본문

코테준비

[백준] 10866, 13023, 11724

상봉동개발자 2022. 10. 27. 21:51
728x90

덱 (10866번)

  • 사이트/난이도: 백준 / 실버 4
  • 코드
# 실버4 덱
import sys
from collections import deque

input = sys.stdin.readline
n = int(input())
q = deque()

for _ in range(n):
    op = input().split()
    if len(op) == 2:
        if op[0] == "push_front":
            q.appendleft(int(op[1]))
        if op[0] == "push_back":
            q.append(int(op[1]))
    if len(op) == 1:
        if op[0] == "pop_front":
            print(-1) if not q else print(q.popleft())
        if op[0] == "pop_back":
            print(-1) if not q else print(q.pop())
        if op[0] == "size":
            print(len(q))
        if op[0] == "empty":
            print(1) if not q else print(0)
        if op[0] == "front":
            print(-1) if not q else print(q[0])
        if op[0] == "back":
            print(-1) if not q else print(q[-1])
  • 느낀점
    • 일반적인 deque 문제

ABCDE (13023번)

  • 사이트/난이도: 백준 / 골드5
  • 코드
# 골드5 ABCDE
import sys
input = sys.stdin.readline

n, m = map(int, input().split())
graph = [[] for _ in range(n)]
visited = [False] * n
answer = False
for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

def dfs(number, depth):
    global answer
    visited[number] = True
    if depth == 4:
        answer = True
        return
    
    for i in graph[number]:
        if not visited[i]:
            visited[i] = True
            dfs(i, depth + 1)
            visited[i] = False

for i in range(n):
    dfs(i, 0)
    visited[i] = False
    if answer:
        print(1)
        break
if not answer:
    print(0)
  • 느낀점
    • 처음에 문제를 이해 못했는데, 다시 읽어보니 dfs를 돌렸을때 깊이가 4까지 되는 관계인지 확인하는 문제였다.
    • 그냥 간단하게 dfs를 통해 구했다.

연결 요소의 개수 (11724번)

  • 사이트/난이도: 백준 / 실버2
  • 코드
# 실버2 연결 요소의 개수
# union-find
def find_parent(x, parent):
    if parent[x] != x:
        parent[x] = find_parent(parent[x], parent)
    return parent[x]

def union(a, b):
    a = find_parent(a, parent)
    b = find_parent(b, parent)
    if a < b:
        parent[b] = a
    else:
        parent[a] = b

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
parent = [i for i in range(n+1)]
for _ in range(m):
    u, v = map(int, input().split())
    union(u, v)

for i in range(1, n+1):
    parent[i] = find_parent(i, parent)
print(len(set(parent[1:])))

# dfs
import sys
input = sys.stdin.readline

n, m = map(int, input().split())
graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)

for _ in range(m):
    u, v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)

def dfs(idx):
    visited[idx] = True
    for i in graph[idx]:
        if not visited[i]:
            visited[i] = True
            dfs(i)

answer = 0
for i in range(1, n+1):
    if not visited[i]:
        answer += 1
        dfs(i)
print(answer)
  • 느낀점
    • union-find, dfs 두가지 접근으로 풀어봤다.
    • 그냥 기본적인 문제였음
728x90

'코테준비' 카테고리의 다른 글

[백준] 7562, 1697  (0) 2022.10.29
[백준] 1707, 2667, 2178, 7576  (0) 2022.10.28
[백준] 11055, 11054  (0) 2022.10.24
[백준] 11057, 2156, 1932  (0) 2022.10.23
[백준] 1149번, 10845번, 1309번  (0) 2022.10.22
Comments