\
[알고리즘] Union-Find
·
Algorithm/개념
개념 그래프 이론으로, 상호 배타적 집합(서로소집합:Disjoint-Set) 알고리즘이라고도 부름 주로 크루스칼(Krusckal) 알고리즘에서 사용하며, 순환하지 않는 트리 를 만들기 위해 사용 단계별로 이해하기 만약 아래 표와 같이 4개의 노드를 가진 서로소 집합이 있다면, 노드 번호 1 2 3 4 대표 번호 1 2 3 4 1번과 2번이 같은 집합이라면? 대표번호를 변경하여 같은 집합을 표현할 수 있음 Union 결과 노드 번호 1 2 3 4 대표 번호 1 1 3 4 아래 표와 같이 있을 때 2번은 어떤 집합에 있는지 알 수 없을까? 노드 번호 1 2 3 4 대표 번호 1 3 4 1 노드 번호를 따라가며 확인할 수 있음 2번 👉 3번 👉 4번 👉 1번 (모두 같은 집합) Find 다른 표현 노드 번호 ..
1717. 집합의 표현
·
Algorithm/BaekJoon Review
https://www.acmicpc.net/problem/1717 문제 해석 합집합과 같은 집합인지 확인하는 문제로 분리집합(Union-Find)의 대표적인 문제이다. 구현 방법 총 3단계로 나누어 구현 Root를 저장할 배열 초기화 Find 함수 작성 같은 Root를 가지고 있는지 확인( 같은 집합인가 확인) Union 함수 작성 서로 다른 두 집합을 합집합 (Root 를 같게 함) 이미 같으면 할 필요 없음 코드 # 1717 집합의 표현 import sys input = sys.stdin.readline def find(num:int)->int: if parent[num] == num: return num parent[num] = find(parent[num]) return parent[num] de..
13994. 새로운 버스 노선
·
Algorithm/SW Expert Academy Review
D2 Problem SW Expert Academy 새로운 버스 노선 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com Solution 1. 1번부터 1000번까지 버스정류장이 정해져 있으므로 버스정류장 리스트를 만들어 운용하자 2. 일반, 급행, 광역 버스 별 조건이 나눠져있지만, 결과적으로 지나가는 곳을 체크한 후 최댓값을 구하면 된다. 3. 조건을 확인하자. - 일반버스: 모두 지나감 - 급행버스: 시작이 짝수/홀수 에 따라 짝수/홀수 번만 지나간다. - 광역버스: - 홀수: 3의 배수이면서 10배수가 아닌 곳 - 짝수: 4의 배수인 곳 - 단, 시작점과 끝점은 반드시 포함된다! 따라서 시작과 끝점 조건을 ..
4613. 러시아 국기 같은 깃발
·
Algorithm/SW Expert Academy Review
D4 problem SW Expert Academy 러시아 국기 같은 깃발 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com Solution 1. 흰색, 파란색, 빨간색의 범위를 반드시 나눠야하며, 이 중 변경할 곳의 최솟값을 찾는다. 2. 범위를 완전탐색을 통해 하나씩 수정할 곳을 확인하여 이 중 최솟값을 찾는다. Code def color(i,j,N): # White 범위 = 0 ~ i # Blue 범위 = i+1 ~ j # Red 범위 = j+1 ~ N-1 white = blue = red = 0# 각각의 개수(하나로 묶어도 됌) # white for k in range(i+1): for l in range..
1210. [S/W 문제해결 기본] 2일차 - Ladder1
·
Algorithm/SW Expert Academy Review
D4 Problem SW Expert Academy Ladder1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com Solution 시작은 여러 곳일 수 있지만, 끝은 하나인 경우 끝부터 시작하면 편하다. 1. 시작 위치를 아래에서 찾는다. 2. 시작 위치를 기준으로 1을 따라서 간다. 3. 우선순위가 위보다 좌, 우에 있으므로 좌, 우부터 탐색한다. 4. 지나온 곳을 탐색할 수 없도록, 지나온 곳을 표시한다.(지워도 된다.) Code for test_case in range(1, 11): T = int(input()) # 인덱싱을 편하게 하기위한 0 패딩 ladder = [[0] + list(map(int, i..
1954. 달팽이 숫자
·
Algorithm/SW Expert Academy Review
D2 Problem SW Expert Academy 달팽이 숫자D2 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com Solution 1. 나아갈 수 있는 방향을 설정해준다.(진행방향 순으로) 2. 진행 방향으로 나아가는 중, 다음과 같은 조건일 때 방향을 바꾼다. - 입력이 이미 되어 있을 때 - 범위 바깥으로 나갔을 때 Code for test_case in range(1, int(input()) + 1 ): N = int(input()) arr = [[0] * N for _ in range(N)] di = [0, 1, 0, -1] dj = [1, 0, -1, 0] recent_i = recent_j = i ..