본문 바로가기

알고리즘 문제풀이259

[백준 1949] 우수 마을 (Swift) https://www.acmicpc.net/problem/1949 DP & DFShttps://sio2whocode.tistory.com/296 SNS 얼리어답터 문제랑 완전 똑같은 문제임차이점은 그때는 최소 얼리어답터 수를 구하는 거였다면(이 문제로 치면 최소 우수마을의 수)지금은 우수마을의 주민 수의 최대 합을 구하는 문제 접근방법트리모양에서 DP를 적용해서 푼다고 생각하면, 나와 내 자식노드까지가 sub tree라고 보고내가 우수마을일 때, 내 자식노드들은 우수마을이면 안됨내가 우수마을이 아닐 때, 내가 자식 노드들은 우수마을이어도 되고, 아니어도 된다.이게 주된 로직이다. 다만 여기서는 내 인접 마을 중 하나는 우수마을이어야 되는데,내가 우수마을이 아닐 때, 내 자식 노드들이 우수마을이 아니어도 .. 2025. 4. 2.
[백준 12851] 숨바꼭질 2 (Swift) https://www.acmicpc.net/problem/12851 BFS & DP N에서 K까지 가는데 -1, +1, *2 경우로 이동할 수 있다. 이때 가장 빠르게 도달하는 시간과 그에 대한 경우의 수를 구하는 문제 접근방법- BFS로 방문하고, 이미 방문했던 노드를 다시 큐에 넣지 않음- 세가지 경우로 이동할 때, 다음 노드가 처음 방문하는 노드라면 다음 노드까지의 최단거리(dist[next])를 지금 노드까지의 최단거리+1을 입력해준다. 그리고 그 거리로 도달하는 경우의 수 (cnt[next])에는 지금 노드의 최단경로 경우의수 (cnt[now])를 넣어준다. {지금 노드로의 제일빨리 도달하는 경우들이 모두 다음 노드로까지 갈 수 있다는 것이기 때문에}- 다음 노드가 처음 방문하는 노드가 아니고,.. 2025. 3. 31.
[백준 8911] 거북이 (Swift) https://www.acmicpc.net/problem/8911 시뮬레이션격자판에서 0,0 점에서 거북이를 앞,뒤로 이동하거나 오른쪽,왼쪽으로 회전하는 명령들이 주어지면그 명령대로 거북이가 이동했을 때 지나는 모든 점을 포함하는 최소 사각형의 넓이를 구하는 문제 접근방법휴 격자판 나오면 늘 긴장하게 됨. 칸을 이동하는건 자신있는데 선을 따라 이동하는건 좀 어려운 것 같다.근데 마음을 다잡고 문제를 풀어보니깐 이번 문제는 꽤 잘 풀렸다!우선 어떻게 지나는 모든 점들을 포함하는 최소 직사각형의 넓이를 구하는 걸 먼저 생각했는데생각해보니 넘 간단했다. 그냥 모든 점들의 최소x, 최대x, 최소y, 최대y를 구해서 가로 길이(최대x-최소x)와 세로길이(최대y-최소y)를 구해서 곱해주면 되는 거였음 그리고 방향전.. 2025. 3. 27.
[백준 2176] 합리적인 이동경로 (C++) https://www.acmicpc.net/problem/2176   오늘 설명은 생략합니다..pq에는 꼭 2까지의 최단 거리인 distance값을 넣는 것 소스코드#include #include #include #include using namespace std;int N, M;int dp[1001];vector dijkstra(vector>> adj){ priority_queue, vector>, greater>> pq; // (노드, 거리) vector distances(N+1, INT_MAX); vector visit(N+1, false); distances[2] = 0; dp[2] = 1; visit[2] = true; pq.push({0,2}); .. 2025. 3. 26.
[백준 12026] BOJ 거리 (Swift) https://www.acmicpc.net/problem/12026 DPB,O,J 중 하나가 쓰여있는 한줄짜리 보도블록들을 걸을 때 B->O->J 순으로 갈 수 있다고 할 때,k칸 이동할 때 k*k의 에너지가 든다고 한다. 최소 에너지만을 사용해서 1번째에서 N번째 까지 도달하는 데 소모되는 최소 에너지를 출력하는 문제, 도달할 수 없다면 -1 출력. 접근방법N의 범위가 1000까지여서 첫번째 칸부터 시작해서, 한번에 갈 수 있는 칸까지 가는데 필요한 에너지를 구하고, 그 칸에 도달하는 최소 에너지를 갱신해가면서 풀어도 N*N보다 적게 나온다. (1000*1000 = 1,000,000 이니까 근데 이것보다 확실히 적게 드니까 괜찮지 않을까 싶어서 그렇게 풀었다. 도달할 수 있는 칸을 배열에 넣고 그 칸들.. 2025. 3. 25.
[백준 16953] A -> B (Swift) https://www.acmicpc.net/problem/16953 BFS정수 A, B (예, 2, 162) 가 주어지면, A에서 B가 되기까지 두가지 연산을 수행할 수 있다고 할 때, 최소 몇번 수행해야 되는지 출력하는 문제, 불가능하면 -1 출력 접근방법BFS나 DFS 완전탐색 문제 풀이할 때는 늘 갈 수 있는 경로 를 생각하면서 푸는데, 이게 문제가 격자판에서 어쩌구 할 경우에는 갈 수 있는 칸이 되고, 지금 문제같은 경우는 가능한 연산 두가지가 된다. 현재 갖고 있는 수에서 2를 곱하는 길 or 1을 가장 오른쪽에 붙이는 길 B까지 도달하는 최단 거리를 구하는 거니까 BFS가 더 효율적인 것 같아서 큐를 사용해서 풀었다.큐의 원소는 두개의 Int를 갖는 튜플로, 첫번째 수는 현재 수, 두번째 수는.. 2025. 3. 24.
[프로그래머스] 보석 쇼핑 (Swift) https://school.programmers.co.kr/learn/courses/30/lessons/67258?language=swift 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr투포인터 완탐 문제 접근방법 투포인터 초기 위치는 0번째 보석이다.현재 구간에 포함된 보석 종류와 등장 빈도수를 저장하는 map이라는 딕셔너리를 갖고 간다.구간이 변경될때마다 map 딕셔너리도 갱신된다. 없는 보석은 값이 0이 아니라 딕셔너리에서 제거되어야 함. (nil을 대입하는거에 번번이 실패해서, removeValue(forKey:) 메서드를 썼다.gems 범위를 투 포인터가 벗어나지 않는 선에서현재 구간이 전체 .. 2025. 3. 21.
[프로그래머스] 파괴되지 않은 건물 (Swift) https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  첫번째 보드에서 0,0 부터 3,4 까지의 칸에 모두 4씩 뺀 결과 = 두번째 보드두번째 보드에서 2,0 부터 2,3 까지의 칸에 모두 2씩 뺀 경과 = 세번째 보드이렇게 공격인지 회복인지의 타입과, 구간(시작점, 끝점), 더하거나 뺄 크기 가 N개 주어졌을 때기존 보드에서 0보다 큰 칸의 개수를 구하는 문제 접근방법누적합 문제였는데 처음에는 그냥 브루트포스마냥 다 일일이 빼는 코드를 짰다가. 시간초과나고도저히 모르겠어서 이전에 풀었던 코드 .. 2025. 3. 21.
[백준 6987] 월드컵 (Swift) https://www.acmicpc.net/problem/6987Simulation + DFS6개국이 서로 한번씩 경기한다고 했을 때, 경기결과를 각 나라마다 승,무,패 횟수로 정리한 표를 보고가능한 결과인지 아닌지 판단하는 문제 접근방법처음에 브루트포스, 백트래킹이라고 써있어서 접근하기 너무 어렵다가나라별로 경기를 치르는 대진의 총 개수가 15개 라는 것을 보고한 경기의 대진을 ( A , B ) 라고 했을 때 15개의 모든 경우를 배열로 저장했다. [(1,2),(1,3),....,(5,6)] 이런식으로그리고 이제 한 경기를 하나의 노드라고 보고 dfs 탐색을 진행하면서각 노드 마다 뻗어나가는 가지는 A>B, A=B, A 세가지가 있을 수 있다고 생각하고 모든 경우를 완전탐색하는 것 그러면 모든 경기의 .. 2025. 3. 20.
728x90