목록알고리즘/SWEA (72)
여름의 서재
📕 문제 https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 풀이법 def find_MST(s): key[0] = 0 for _ in range(V): min_idx = -1 min_val = float('inf') for i in range(V+1): if not visited[i] and key[i] < min_val: min_idx = i min_val = key[i] visited[min_idx] = 1 for i in range(V+1): if adj_mat[min_idx][i]..
📕 문제 https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 풀이법 1. find_set함수는 그 노드가 속해있는 집단의 대표자를 찾는 함수이다, 2. union 함수는 두 노드를 합치는 함수이다. 3. 간선의 정보를 다 받아서 간선으로 이어져 있는 노드들은 union 함수를 적용시켜준다. 4. 모든 노드들을 돌면서 각 노드들이 속해있는 집단의 대표자의 개수를 구하면 몇개의 조가 만들어져있는지 알 수 있다. def find_set(x): if x == parents[x]: return x..
📕 문제 https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 풀이법 1. set으로 visited를 만든다. 2. bfs를 이용해서 +1, -1, *2, -10 네 가지의 연산한 결과값이 현재까지 나온 숫자가 아니고 백만보다 작다면 결과값과 지금까지의 연산 횟수를 deq에 넣는다. 3. 그리고 결과값을 visited에 담는다. (다른 연산에서 같은 결과값이 나왔다면 굳이 계속해서 연산을 진행할 필요가 없기 때문에 -> 실행시간 절약) 4. 만약 n이 M이 된다면 c(지금까지의 연산횟수)를..
📕 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GOPPaAeMDFAXB SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 풀이법 1. 시작점이 정해져있지 않기 때문에 모든 노드를 시작점으로 하고 dfs를 돌려봐야 한다. 2. dfs 재귀를 구현했는데 s는 현재위치, n은 지금까지 방문한 노드들의 개수가 담긴다. 3. n이 만약 ans보다 크다면 ans를 n으로 바꿔준다. 4. 모든 노드들을 확인하며 방문하지 않은 노드가 있다면 방문체크를 해주고 그 노드에 대해 dfs를 실행시켜준다. (단, dfs를 돌린후..
📕 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeUtVakTMDFAVH SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 풀이법 1. dfs의 n은 현재까지 고른 재료의 개수이고, k는 탐색해야할 리스트의 시작점이다. 2. 먼저 처음에는 n = 0 이고, k는 0부터 가능하기 때문에 dfs(0, 0)을 실행시킨다. 3. 만약 n이 N//2이 되면 반을 고른거기 때문에 멈추고, 현재까지 고른 재료는 A, 고르지 않은 재료는 B의 재료로 해서 시너지들의 합을 구한다. 두 시너지의 합의 차이와 ans를 비교해서..
📕 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 풀이법 : dfs로 풀었는데 확실히 재귀보다 stack을 이용해서 푸는게 훠~~~얼씬 빨랐다..👍 1. 대각선 방향으로 움직이기 때문에 4방향의 대각선 방향을 dxy로 만들어준다. 2. 어디서 시작할지 모르기 때문에 2중 for문을 돌며서 시작점을 매번 바꿔가면 dfs를 돌려준다. 3. 그런데 매번 4개의 대각선 방향을 다 탐색해줄 필요가 없는게 어차피 윗방향의 대각선은 for문을 돌며..
📕 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b7Yf6ABcBBASw SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 풀이법 : 그냥 단순한 조합 문제였다. 1. 키 리스트를 오름차순 정렬시켜준다. 2. 답을 담을 ans를 +무한대로 초기화시켜준다. 3. n은 직원의 수이다. 1부터 N까지 while문을 돌며 1씩 증가시켜준다. 4. 실행시간을 단축하기위해 먼저 직원의 수가 n일때의 가장 높은 탑의 높이를 B와 비교해서 작다면 바로 continue를 해서 아래를 실행시키지 않고 n을 1 증가시켜줬다. ..
📕 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LtJYKDzsDFAXc SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 풀이법 1. 방문처리를 해줄 visited 라는 NxN 행렬을 만든다. 2. ans는 최대 방의 개수이고, 가장 많은 방을 이동할 수 있는 출발 방번호이고, max_ans는 현재 방위치에서 갈수 있는 최대 방 개수이다. (즉, ans는 전체를 모두 봤을때 나온 최대 방의 개수이고, max_ans는 현재 위치에서만 갈수 있는 최대 방의 개수이다.) 3. bfs를 이용하는데 l은 현재까지의..