Algorithm & Data Structure
-
Kruskal(크루스칼) 알고리즘2020.03.23
-
UnionFind 알고리즘2020.03.23
-
[삼성SW기출][백준] 17471. 게리맨더링2020.03.20
-
[삼성SW기출][백준] 17406. 배열 돌리기 42020.03.19
-
[SWEA 모의 SW 역량테스트] 5656. 벽돌 깨기2020.03.18
-
[삼성SW기출] [백준] 3954. Brainf**k 인터프리터2020.03.16
-
[삼성SW기출] [백준] 17142. 연구소 32020.03.15
-
[삼성SW기출] 17140 이차원 배열과 연산2020.03.14
Kruskal(크루스칼) 알고리즘
참고사이트:https://blog.naver.com/ndb796/221230994142
18. 크루스칼 알고리즘(Kruskal Algorithm)
이번 시간에 다루어 볼 내용은 바로 크루스칼 알고리즘입니다. 크루스칼 알고리즘은 가장 적은 비용으로 모...
blog.naver.com
https://gmlwjd9405.github.io/2018/08/28/algorithm-mst.html
[알고리즘] 최소 신장 트리(MST, Minimum Spanning Tree)란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
가장 적은 비용으로 모든 노드를 연결하기 위해 사용하는 알고리즘 입니다.
* MST(최소 신장 트리)를 만들기위한 알고리즘 입니다.
MST란 Minimum Spanning Tree 로서 최소 신장 트리라고 합니다.
특징은
간선의 가중치 합이 최소여야 하고,
n개의 정점을 가지는 그래프에 대해 반드시 (n-1)개의 간선을 사용해아 하며,
사이클이 포함되어서는 안됩니다.
구현 방법이 바로 Kruskal MST 알고리즘 입니다.
'Algorithm & Data Structure > Background' 카테고리의 다른 글
플로이드 와샬(Floyd Warshall) 알고리즘 (0) | 2020.05.01 |
---|---|
LCS, Longest Common Substring, Longest Common Subsequence 알고리즘 (0) | 2020.03.26 |
UnionFind 알고리즘 (0) | 2020.03.23 |
[Java] HashSet (0) | 2020.01.07 |
[JAVA] 자료형 정리 (0) | 2019.11.24 |
UnionFind 알고리즘
참고사이트:https://blog.naver.com/ndb796/221230967614
17. Union-Find(합집합 찾기)
Union-Find(유니온-파인드)는 대표적인 그래프 알고리즘입니다. 바로 '합집합 찾기'라는 의미를 가진 알...
blog.naver.com
합집합을 찾는 그래프 알고리즘 입니다. Disjoint - Set 알고리즘 이라고도 합니다.
여러개의 노드가 존재할 때 두개의 노드를 선택해서, 두개의 노드가 현재 같은 그래프에 속하는지 판별하는 알고리즘 입니다.
크루스칼 알고리즘에 사용되는 알고리즘 입니다.
'Algorithm & Data Structure > Background' 카테고리의 다른 글
LCS, Longest Common Substring, Longest Common Subsequence 알고리즘 (0) | 2020.03.26 |
---|---|
Kruskal(크루스칼) 알고리즘 (0) | 2020.03.23 |
[Java] HashSet (0) | 2020.01.07 |
[JAVA] 자료형 정리 (0) | 2019.11.24 |
[Java] Comparator Interface (0) | 2019.11.24 |
[삼성SW기출][백준] 17471. 게리맨더링
https://www.acmicpc.net/problem/17471
17471번: 게리맨더링
선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다.
www.acmicpc.net
DFS혹은 BFS를 잘 활용해야하는 문제였습니다.
저는 DFS를 사용해 해결했습니다.
* n이 2일때 예외처리를 해줍니다.
접근방법
- 그룹을 두개로 나누기 위해 1~n/2 개씩 그룹화 해주면, 각 케이스별로 나머지 도시들도 다른 그룹이 됩니다.
- 그룹을 나누는건 백트래킹을 사용해 순열을 조합합니다. (next permutation)
- 그룹이 정해지면 A,B그룹으로 도시들을 리스트에 담고, 각 그룹이 연결되었는지 DFS를 활용해 점검합니다.
- 만약 두 그룹 모두 연결된 상태면 인구수 차이의 최솟값을 업데이트 합니다.
'Algorithm & Data Structure > SWEA' 카테고리의 다른 글
[백준xSWEA] 13460. 구슬 탈출 2 (review) (0) | 2020.10.09 |
---|---|
[삼성SW기출][백준] 17472. 다리만들기 2(Kruskal, unionFind) (0) | 2020.03.24 |
[삼성SW기출][백준] 17406. 배열 돌리기 4 (0) | 2020.03.19 |
[SWEA 모의 SW 역량테스트] 5656. 벽돌 깨기 (0) | 2020.03.18 |
[삼성SW기출] [백준] 3954. Brainf**k 인터프리터 (0) | 2020.03.16 |
[삼성SW기출][백준] 17406. 배열 돌리기 4
https://www.acmicpc.net/problem/17406
17406번: 배열 돌리기 4
크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 값은 4이다. 1 2 3 2 1 1 4 5 6 배열은 회전 연산을 수행할 수 있다. 회전 연산은 세 정수 (r, c, s)로 이루어져 있고, 가장 왼쪽 윗 칸이 (r-s, c-s), 가장 오른쪽 아랫 칸이 (r+s, c+s)인 정사각형을 시계
www.acmicpc.net
배열을 시계방향 회전시키는 시뮬레이션 문제였습니다.
연산 순서 순열을 백트래킹 적으로 만든 뒤 연산 순서에 따라 배열을 회전시켜주는 식으로 구현했습니다.
연산 순서를 바꿔 연산할때 마다 원본 배열을 사용해야 합니다.
'Algorithm & Data Structure > SWEA' 카테고리의 다른 글
[삼성SW기출][백준] 17472. 다리만들기 2(Kruskal, unionFind) (0) | 2020.03.24 |
---|---|
[삼성SW기출][백준] 17471. 게리맨더링 (0) | 2020.03.20 |
[SWEA 모의 SW 역량테스트] 5656. 벽돌 깨기 (0) | 2020.03.18 |
[삼성SW기출] [백준] 3954. Brainf**k 인터프리터 (0) | 2020.03.16 |
[삼성SW기출] [백준] 17142. 연구소 3 (0) | 2020.03.15 |
[SWEA 모의 SW 역량테스트] 5656. 벽돌 깨기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
부르트포스, DFS(백트래킹), BFS를 사용한 시뮬레이션 문제였습니다.
구현방법
- 구슬을 놓을 열의 위치를 백트래킹적으로 모든 경우의 수를 구해줍니다.
- 주어진 구슬의 수 만큼 경우의 수가 충족되면 게임시작.
- 타겟 열의 가장 첫번째 벽돌을 시작점으로 합니다. 타겟 열에 벽돌이 없을경우 바로 다음으로 넘어갑니다.
- 상하좌우로 벽돌의 파워만큼 주변벽돌을 깨트려 줍니다.
- 벽돌을 깬 뒤, 남은벽돌 들 을 밑으로 내려 줍니다. (Stack을 사용합니다)
- visited배열 도 매번 리셋해줍니다.(중요)
'Algorithm & Data Structure > SWEA' 카테고리의 다른 글
[삼성SW기출][백준] 17471. 게리맨더링 (0) | 2020.03.20 |
---|---|
[삼성SW기출][백준] 17406. 배열 돌리기 4 (0) | 2020.03.19 |
[삼성SW기출] [백준] 3954. Brainf**k 인터프리터 (0) | 2020.03.16 |
[삼성SW기출] [백준] 17142. 연구소 3 (0) | 2020.03.15 |
[삼성SW기출] 17140 이차원 배열과 연산 (0) | 2020.03.14 |
[삼성SW기출] [백준] 3954. Brainf**k 인터프리터
https://www.acmicpc.net/problem/3954
3954번: Brainf**k 인터프리터
문제 Brainf**k 프로그램이 주어졌을 때, 이 프로그램이 끝나는지, 무한 루프에 빠지는지 알아내는 프로그램을 작성하시오. Brainf**k 인터프리터는 정수를 담는 하나의 배열(unsigned 8-bit 정수)과, 그 배열의 칸 하나를 가리키는 포인터로 이루어져 있다. Brainf**k 프로그램은 다음과 같이 8개의 명령어로 이루어져 있다. - 포인터가 가리키는 수를 1 감소시킨다. (modulo 28) + 포인터가 가리키는 수를 1 증가시킨다. (
www.acmicpc.net
시뮬레이션 문제였습니다.
* 주의할 점
만약 [ [ ] [ ] ] 경우 내부에서 무한루프인지 외부에서 무한루프인지 알아야 합니다.
그리고 무한루프의 분기를 위해 배열을 사용해서 점프지점을 저장해줍니다.
이 부분은 다른 블로그를 참고하여 구현했습니다.
https://lcs11244.tistory.com/61
[벡준] 3954 - Brainf**k 인터프리터
문제 이름 한번 잘 지었네..... f**k만 몇번을 외쳤던가.... A+등급을 딸 때 풀었던 문제라 쉽게생각하고 건드렸다가 문제 출력조건이 조금 달라서 맞왜틀 이러고 1시간을 날려먹은 문제 문제 조건도 애매모호한..
lcs11244.tistory.com
이 외에는 시뮬레이션으로 구현해주면 됩니다.
'Algorithm & Data Structure > SWEA' 카테고리의 다른 글
[삼성SW기출][백준] 17406. 배열 돌리기 4 (0) | 2020.03.19 |
---|---|
[SWEA 모의 SW 역량테스트] 5656. 벽돌 깨기 (0) | 2020.03.18 |
[삼성SW기출] [백준] 17142. 연구소 3 (0) | 2020.03.15 |
[삼성SW기출] 17140 이차원 배열과 연산 (0) | 2020.03.14 |
[SWEA 모의 SW 역량테스트] 5644. 무선충전 (0) | 2020.03.13 |
[삼성SW기출] [백준] 17142. 연구소 3
https://www.acmicpc.net/problem/17142
17142번: 연구소 3
인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고, 활성 상태인 바이러스는 상하좌우로 인접한 모든 빈 칸으로 동시에 복제되며, 1초가 걸린다. 승원이는 연구소의 바이러스 M개를 활성 상태로 변경하려고 한다. 연구소는 크기가 N×N인 정사각형으로 나타낼 수 있으며, 정사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는
www.acmicpc.net
반례들이 많은 문제 였습니다.
특히 활성바이러스가 비활성 바이러스에 도달하면 활성으로 변하는 조건을 빠트리면 안됩니다.
주어진 조건을 세세하게 지켜주어야 합니다.
맵은 char배열로 구현하였고,
바이러스가 놓여질수 있는 곳을 LinkedList에 저장해놓고 시작합니다.
LinkedList를 사용해서 백트래킹적으로 바이러스가 활성화 될 수 있는 지점을 정해줍니다.(brute force)
활성 바이러스가 m개가 되면 바이러스 전파가 시작되고, 전파가 끝나면 맵에 전파가 안된 지점이 있으면 그대로 종료하고,
아니면 걸린시간의 최소값을 계속 업데이트 해줍니다.
* 백트래킹에 사용하기 위해 LinkedList와 같이 사용하는 boolean[] viisted배열이 있고
* 바이러스 전파할때 비활성 바이러스가 활성으로 변하는 반례를 해결하기 위해 boolean[][] virused배열을 사용했습니다.
* 활성 바이러스 지점을 처음엔 백트래킹을 위해 '!'으로 masking 해주고, 전파가 시작될때 비활성을 '*', 활성을 '0'으로 바꿔주어야 바이러스 전파가 끝나고 최소 시간을 측정할때 간편해 집니다.
'Algorithm & Data Structure > SWEA' 카테고리의 다른 글
[SWEA 모의 SW 역량테스트] 5656. 벽돌 깨기 (0) | 2020.03.18 |
---|---|
[삼성SW기출] [백준] 3954. Brainf**k 인터프리터 (0) | 2020.03.16 |
[삼성SW기출] 17140 이차원 배열과 연산 (0) | 2020.03.14 |
[SWEA 모의 SW 역량테스트] 5644. 무선충전 (0) | 2020.03.13 |
[삼성SW기출] [백준] 17143 낚시왕 (0) | 2020.03.12 |
[삼성SW기출] 17140 이차원 배열과 연산
https://www.acmicpc.net/problem/17140
17140번: 이차원 배열과 연산
첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다.
www.acmicpc.net
- ArrayList[][]를 사용하여 맵을 구현했습니다.
- 정렬은 Comparator의 compare를 오버라이드 하여 사용했습니다.
- 횟수와 숫자를 저장할 Pari클래스를 정의하고
- ArrayList<Pair>[] pairs를 사용해 다음 행렬의 값들을 순서쌍으로 나타낸 뒤 정렬합니다. 제로패딩도 pairs를 사용해 구현합니다.
- 만들어진 pairs를 토대로 nextMap에 다음행렬을 나타내고, 원본 map을 다시생성해서 복사하는 식으로 구현했습니다.
'Algorithm & Data Structure > SWEA' 카테고리의 다른 글
[삼성SW기출] [백준] 3954. Brainf**k 인터프리터 (0) | 2020.03.16 |
---|---|
[삼성SW기출] [백준] 17142. 연구소 3 (0) | 2020.03.15 |
[SWEA 모의 SW 역량테스트] 5644. 무선충전 (0) | 2020.03.13 |
[삼성SW기출] [백준] 17143 낚시왕 (0) | 2020.03.12 |
[삼성SW기출] [백준] 17144 미세먼지 안녕! (0) | 2020.03.11 |