728x90 전체 글279 [SWEA/Python] 5251. 최소 이동 거리 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 다익스트라(dijkstra) 알고리즘을 활용한 풀이 (프림 알고리즘과 비슷) 방문하지 않은 지점 중에서 이동거리가 최소인 지점을 찾는다. 2의 지점과 인접한 지점 중에서 아직 방문하지 않은 지점에서 이동거리를 비교해서 갱신한다. 📌 코드 import sys sys.stdin = open('input.txt') def dijkstra(start): distance[start] = 0 # 노드의 개수만큼 반복 for _ in range(N+1): min_idx = -.. 2021. 10. 15. [SWEA/Python] 5250. 최소 비용 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 bfs를 활용해서 인접한 지역으로 이동한다. 이동한 지역이 이동 전 지역보다 높을 경우, 차이를 저장해준다. 이동할 지역에 이미 저장된 비용보다 현재의 경로로 이동할 때의 비용이 더 덜든 다면, 비용을 갱신해준다. (이 조건이 있기 때문에 따로 방문체크를 안해줘도 된다! 방문체크를 하면 오히려 최소 거리로만 이동하게 된다.) 📌 코드 from collections import deque import sys sys.stdin = open('input.txt') de.. 2021. 10. 15. [SWEA/Python] 5249. 최소 신장 트리 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 크루스칼 알고리즘을 사용해서 풀었다. 간선을 가중치를 기준으로 내림차순 정렬을 해준다. 노드1, 노드2의 조상 노드가 다르다면 사이클이 만들어지지 않으므로 연결해준다. 3번의 과정을 반복하며 가중치를 더해서 출력해준다. 📌 코드 import sys sys.stdin = open('input.txt') def find_set(x): if x != parents[x]: parents[x] = find_set(parents[x]) return parents[x] def.. 2021. 10. 14. [SWEA/Python] 5248. 그룹 나누기 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 하나의 조를 집합으로 생각하고 각 집합마다 집합을 대표하는 수를 parents에 저장한다. (초기값은 자기자신) 입력 값에 따라 union함수를 실행시켜서 집합을 합친다. 모든 조를 다 짠 후, 전체 원소에 대해 find_set 함수를 실행해서 대표 숫자를 업데이트 해준다. 대표 숫자를 set으로 만들어서 중복값을 없애주고 길이를 출력하면 완성된 조의 숫자가 된다. (parents에 0도 포함되므로 1은 빼준다.) 📌 코드 import sys sys.stdin =.. 2021. 10. 14. [SWEA/Python] 5247. 연산 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 bfs를 활용해서 각 계산값에 접근하는 방식으로 풀었다. 최대 재귀 깊이를 넘어가길래 가지치기를 해줬는데, 첫 번째 코드처럼 append하고 not in으로 탐색하는 방식은 시간초과가 났다. 그래서 두 번째 코드처럼 처음부터 모든 숫자만큼 리스트를 만들어주고 숫자가 중복되지 않도록 이미 나온 숫자는 1로 바꿔줬다. 📌 코드 from collections import deque def find_M(N): queue = deque() queue.append((N, 0.. 2021. 10. 14. [BOJ/Python] 14981. 톱니바퀴 📌 문제 https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 📌 문제 접근 방법 톱니바퀴의 상태를 deque을 이용해서 받아서 원형큐라고 생각하고 코드를 구현했다. 시계방향으로 회전일 경우, 맨 마지막 원소를 빼서 맨 첫 번째에 삽입해줬다. 반시계방향으로 회전일 경우, 맨 첫 번째 원소를 빼서 맨 마지막에 삽입해줬다. 그리고 회전이 일어나는 경우, 앞 뒤 바퀴와 원소를 비교해서 맞물린 부분이 다르면 해당 바퀴도 재귀로 회전을 시켜줬다. 이 때,.. 2021. 10. 14. [BOJ/Python] 17471. 게리맨더링 📌 문제 https://www.acmicpc.net/problem/17471 17471번: 게리맨더링 선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다. www.acmicpc.net 📌 문제 접근 방법 N개의 구역을 조합을 이용해서 2개의 선거구로 나눈다. 각 선거구를 bfs를 통해 탐색해서 모든 구역에 방문할 수 있는지 체크한다. 여기서, 선거구에 있는 구역만 탐색을 하는 것이 포인트! (w in group → 이걸 처리 안해줘서 실패가 나왔음!) 2개의 선거구 모두 선거구 안의 모든 구역에 방문할 수 있다면, 인구 수의 차이를 구하고 최소값으로 갱신한다. 📌 코드 # 백준 17471 .. 2021. 10. 13. [BOJ/Python] 14503. 로봇 청소기 📌 문제 https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 📌 문제 접근 방법 바보같이 문제 파악을 잘 못해서 어어어어엄청 헤맸다😣 문제를 찬찬히 살펴보자면, 1) 현재 위치를 청소한다. 2) 현재 위치에서 왼쪽 방향부터 차례로 인접한 칸을 탐색한다. 2-1) 청소할 공간이 있다면, 해당 방향(청소할 공간의 방향)으로 회전하여 전진한다. 2-2) 네 방향 모두 청소할 수 없다면, 바라보는 방향(마지막으로 탐색한 방향)을 유지한 채로 후진한다. .. 2021. 10. 13. [SWEA/Python] 2105. [모의 SW 역량테스트] 디저트 카페 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 목표하는 지점까지 도착해야 끝나므로 dfs! 어차피 디저트가 중복될 수 없으므로 방문체크는 안해줬다. 사각형을 그리는 경우, 현재 위치를 기준으로 위로 올라가는 사각형과 아래로 내려가는 사각형이 있을텐데 결국 중복되므로 한가지 방향만 생각해주면 된다. (사각형 하나를 만들때 방향 전환은 딱 3번만 해주면 된다.) 현재 위치에서 이동할 수 있는 경우의 수는 직진과 꺾어서 가는 경우 2가지 위의 2가지를 완전 탐색하고 최대 값을 출력한다. 📌 코드 import sys.. 2021. 10. 12. [BOJ/Python] 5556. 타일 📌 문제 https://www.acmicpc.net/problem/5556 5556번: 타일 상근이는 타일로 작품을 만드는 예술가이다. 크기가 N × N인 작품을 만들기 위해서 상근이는 1 × 1 타일을 사용한다. 색상은 빨강, 파랑, 노랑 중 하나이다. 작품은 가장 바깥쪽에 빨간색을 붙이 www.acmicpc.net 📌 문제 접근 방법 처음엔 타일의 인덱스를 받아서 타일이 바깥쪽에서 얼마나 안으로 들어와있는지를 num을 통해서 구했다. → 시간초과 시간초과가 나고 N의 범위를 보니, 타일의 인덱스를 받자마자 거기서 계산해서 바로 나와야 하는 것 같았다. 우선, 타일의 인덱스를 타일의 중심을 기준으로 왼쪽 위부분만 고려하도록 인덱스를 변형해줬다. 왼쪽 위 부분만 본다면, 한 행에 i개의 색깔을 쓸 수 있.. 2021. 10. 9. 이전 1 ··· 8 9 10 11 12 13 14 ··· 28 다음 728x90