Loading...

최소 스패닝 트리를 이용해서 그래프를 두 집합으로 분리하기(크루스칼 알고리즘 미세팁)

1. 문제 1647번: 도시 분할 계획 (acmicpc.net) 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 2. 풀이 입력 자체가 "임의의 두 집 사이에 경로가 항상 존재하는 입력이 주어진다"라고 되어있는데 맨 처음에는 모든 정점에 대하여 서로 연결된 하나의 그래프 집합이 주어지는데.. 여기서 몇개의 간선을 선택해서 두 집합으로 분리하라는 문제 이 때 선택된 간선의 가중치 합이 최소가 되도록 만들어야한다 최소 스패닝 트리 이전에 그냥 진짜 단순하게 생각해보면, 초기에..

2022. 10. 30. 04:30

비트마스킹 연습하기1(백준 25166,12833)

1. 문제 25166번: 배고픈 아리의 샌드위치 구매하기 (acmicpc.net) 25166번: 배고픈 아리의 샌드위치 구매하기 "두리"라는 나라가 있다. 이 나라에서 사용되는 동전은 1원, 2원, 4원, 8원, 16원, 32원, 64원, 128원, 256원, 512원짜리 이렇게 총 10가지이다. 이 나라의 국민인 아리는 10가지의 동전을 각각 1개씩 총 10 www.acmicpc.net 1,2,4,8,16,32,64,128,256,512원짜리 동전만 사용가능할때, 이들을 하나씩 가지고 있는데, 친구에게 돈을 빌려서라도 샌드위치 가격만큼 내줄 수 있는지 아닌지 알아보는 문제 2. 풀이 브론즈1인데.. 어렵다.. 비트마스킹 이론 공부 했는데 뭔가 응용하기가 어렵다고 해야하나..? 연습좀 많이 해봐야겠지 이..

2022. 10. 23. 02:57

비트마스킹을 위한 비트연산 필수이론 가볍게 정리

1. 비트(bit) 정보를 구분하는 최소 단위로 이진 숫자(binary)를 뜻한다 0,1의 값을 가지며 True/False나 on/off같은 2가지 상태를 나타낼 수 있다 10진수를 2진수로 바꾸면 해당 10진수에 대응하는 하나의 비트열을 얻는다 2. 비트연산 - 비트연산은 비트열의 같은 위치끼리만 연산함 2-1) &(and) 비트 단위로 and연산을 수행 비트가 둘다 1이면 1이고, 하나라도 0이면 0인 연산 & 연산은 위 표에서 특징을 자세히 살펴보면.. 1) 0과 and연산은 무조건 결과가 0이다 0&0 = 0 0&1 = 0 2) 1과 and연산은 나머지 비트를 그대로 가져온다 1&1 = 1 1&0 = 0 2가지 성질을 잘 이용하면.. 3) 어떤 비트열에서, 특정 부분을 0으로 만들고 싶다면.. 나..

2022. 8. 1. 02:22

집합 set의 메소드

1. set 중복되는 요소가 없이, 순서에 상관없는 데이터들의 묶음 중복을 허용하지 않으므로 중복되는 원소가 있다면 하나만 저장함 순서가 없으므로 인덱스를 이용한 접근이 불가능하다 수학에서 집합을 표현한 자료형 >> 집합연산이 가능한데, 여집합을 나타내는 연산자는 별도로 존재하지 않아 >> 중복된 값이 존재하지 않아 담고 있는 요소를 삽입, 변경, 삭제가 가능함 >> 가변 자료형(mutable) 2. set의 메소드 리스트에서 append()를 쓰는것과는 다르게 set은 add로 추가한다는 점에서 add가 제일 중요하고.. 나머지도 알아보자고 set은 순서가 없는 자료형이기 때문에 s.pop()을 하면 랜덤하게 항목을 제거해서 반환한다고함 비슷하게 add()도 랜덤한 위치에 넣는다고 하는데 3. s.ad..

2022. 2. 2. 23:31

union find 알고리즘

서로소 집합 알고리즘(disjoint set) 그래프 내에서 여러개의 node가 존재할 때 2개의 node를 선택해서 이 node가 서로 같은 node에 속하는지 판별하는 알고리즘 예를 들어 다음과 같이 8개의 node가 존재한다면 이런 경우는 부모 node가 자기 자신인 경우이다 이제 1과 2가 연결되었다고 생각해보자 이런 경우 2의 부모 node는 1이 된다 이렇게 합쳐나가는 과정을 union알고리즘이라고 부른다 이번엔 2와 3도 연결되었다고 가정해본다면 그러면 3의 부모 node는 2가 되는데 3과 1이 연결되었다는 것은 어떻게 아는가? 3의 부모 node는 2이고 2의 부모 node는 1이라서 부모 node만 보고서는 판단할 수가 없다 그렇지만 재귀함수를 사용하면 3의 부모 node가 2를 가리키..

2022. 1. 11. 22:39

파이썬의 튜플(Tuple), 집합(set), 사전(dict)에 대하여

1. 튜플(tuple) 리스트랑 비슷하지만 [1,2,3] 대신 (1,2,3)같이 ()을 사용 리스트가 사용하는 대부분 연산이 가능하나 원소의 변경이 불가능하다 이러한 특징때문에 프로그램 동작하면서 절대 변경되어서는 안되는 데이터(예:학번, 우편번호 등)를 저장할 때 사용한다 사용자 실수에 의한 데이터 변경 에러를 미리 방지 2. 하나의 원소를 가지는 튜플 (1)은 정수로 인식하고 (1,)을 튜플로 인식 a=(1) a 1 type(a) int b=(1,) b (1,) type(b) tuple 3. 집합(set) 데이터를 순서 없이 저장하는데 중복을 허용하고 싶지 않을때 리스트보다 유용하다 s = set([1,2,3,1,2,3]) s {1,2,3} type(s) set ##리스트의 중복을 제거하는 기술 li..