본문 바로가기
728x90

Python48

백준 gcd와 최단 경로 [32632] 파이썬(Python) 코드 + 해설 문제 설명정점이 1번부터 N번까지 있는 그래프가 주어진다. 두 정점 x와 y 사이에 간선이 존재하는 조건은 gcd⁡(x,y)=1일 때이다. 즉, 서로소인 정점들 사이에 간선이 존재한다.정점 x에서 정점 y까지의 최단 경로 길이 dist(x,y)는 경로에 포함된 간선의 개수로 정의된다. 경로가 존재하지 않으면 dist(x, y) = 10^{10^{10}}으로 정의된다.정수 K가 주어질 때, 다음 조건을 만족하는 정수 x의 개수를 구해야 한다.1≤x≤Ndist(x,K)=gcd⁡(x,K)문제 해결 방법이 문제는 각 정수 x에 대해 dist(x,K)와 gcd⁡(x,K)를 비교하여 조건을 만족하는 x의 개수를 구하는 문제이다.그래프의 특성 분석간선의 존재 조건: 두 정점 x와 y 사이에 간선이 존재하려면 gcd⁡.. 2024. 11. 12.
백준 ABB to BA (Hard) [32293] 파이썬(Python) 코드 + 해설 문제 설명'A'와 'B'로만 구성된 문자열 S가 주어진다. 다음 동작을 더 이상 수행할 수 없을 때까지 반복한다:문자열 S에서 첫 번째로 등장하는 부분 문자열 "ABB"를 찾는다.그 위치를 i라고 할 때, 𝑆𝑖와 𝑆𝑖+1를 각각 'B'와 'A'로 바꾸고, 𝑆𝑖+2​를 문자열에서 제거한다.즉, "ABB"를 "BA"로 변환한다.문자열에 "ABB"가 더 이상 존재하지 않을 때까지 이 과정을 반복한다.반복이 끝난 후의 문자열 S를 출력하는 프로그램을 작성해야 한다. 문제 해결 방법이 문제는 문자열에서 특정 패턴("ABB")을 찾아 변환하는 작업을 반복적으로 수행해야 한다. 그러나 문자열의 길이가 최대 5×10^5이므로 단순한 탐색으로는 시간 초과가 발생한다.효율적인 해결을 위해 다음과 같은 방법을 사.. 2024. 11. 11.
백준 토마토 [7576] 파이썬(Python) 코드 + 해설 문제 설명철수의 토마토 농장에서는 M x N 크기의 격자 모양 상자에 토마토를 보관한다. 토마토 중에는 익은 토마토(1)도 있고, 익지 않은 토마토(0)도 있으며, 토마토가 들어있지 않은 칸(-1)도 있다. 익은 토마토는 하루가 지나면 인접한 네 방향(상, 하, 좌, 우)에 있는 익지 않은 토마토를 익게 만든다. 이때, 상자에 있는 모든 토마토가 며칠이 지나면 다 익는지, 그 최소 일수를 구하는 프로그램을 작성한다. 단, 처음부터 모든 토마토가 익어있으면 0을 출력하고, 모두 익지 못하는 상황이면 -1을 출력해야 한다.문제 해결 방법이 문제는 BFS(너비 우선 탐색)를 이용해 해결할 수 있다. BFS는 그래프의 모든 인접 노드를 방문하며 탐색하는 방법으로, 여러 단계에 걸쳐 확산되는 문제를 해결하는 데 .. 2024. 11. 10.
백준 KCM Travel [10217] 파이썬(Python) 코드 + 해설 문제 설명찬민이는 인천에서 LA로 여행을 가려고 합니다. 하지만 구글에서 여행 비용을 최대 M원까지 지원해주기 때문에, 이 예산 내에서 가장 빠르게 LA에 도착해야 합니다. 각 도시 간의 항공편은 비용과 시간이 주어집니다.목표: 인천(1번 도시)에서 LA(N번 도시)까지 비용 M원 이하로 사용하면서 도착할 수 있는 가장 빠른 시간을 구하는 것입니다. 만약 예산 내에서 도착할 수 없다면 "Poor KCM"을 출력합니다.입력 조건T: 테스트 케이스의 수 (1 ≤ T ≤ 100)각 테스트 케이스:N: 공항의 수 (2 ≤ N ≤ 100)M: 지원 비용 (0 ≤ M ≤ 10,000)K: 티켓 정보의 수 (0 ≤ K ≤ 10,000)K개의 티켓 정보:u, v: 출발 공항과 도착 공항 (1 ≤ u, v ≤ N)c: .. 2024. 11. 9.
백준 원판 돌리기 [17822] 파이썬(Python) 코드 + 해설 문제 설명반지름이 1부터 N까지인 원판들이 바닥에 놓여 있고, 각 원판에는 M개의 정수가 적혀 있다. 원판들은 중심을 공유하며, 각 원판의 번호는 작은 것부터 큰 것까지 1부터 N까지이다. 각 원판의 위치는 (i,j)로 표현되며, i는 원판의 번호, j는 원판 위의 숫자 위치이다. 원판들은 독립적으로 회전할 수 있으며, 회전은 시계 방향 또는 반시계 방향으로 이루어진다. 회전 후에는 다음과 같은 작업을 수행한다: 인접하면서 수가 같은 것들을 모두 찾는다. 인접한 위치는 다음과 같다: 같은 원판에서 양 옆에 있는 숫자들 같은 위치의 위아래 원판 숫자들 인접하면서 수가 같은 것이 있으면, 해당 수들을 지운다 (0으로 만든다). 없으면, 원판에 적힌 수들의 평균을 구하고, 평균보다 큰 수에서 1을 빼고, 작은.. 2024. 11. 8.
백준 새로운 게임2 [17837] 파이썬(Python) 코드 + 해설 문제 설명재현이는 체스판과 말을 이용하여 새로운 게임을 만들었다. 이 게임은 크기가 N×N인 체스판에서 진행되며, 말은 총 K개가 사용된다. 말은 원판 모양이며, 하나의 말 위에 다른 말을 올릴 수 있다. 체스판의 각 칸은 흰색(0), 빨간색(1), 파란색(2) 중 하나로 색칠되어 있다.게임은 체스판 위에 말을 놓고 시작한다. 말은 1번부터 K번까지 번호가 매겨져 있고, 이동 방향도 미리 정해져 있다. 이동 방향은 오른쪽(1), 왼쪽(2), 위쪽(3), 아래쪽(4) 중 하나이다.각 턴은 1번 말부터 K번 말까지 순서대로 이동시키는 것이다. 한 말이 이동할 때, 그 말 위에 다른 말이 있으면 함께 이동한다. 말의 이동 규칙은 다음과 같다.이동하려는 칸이 흰색인 경우:그 칸으로 이동한다.이동하려는 칸에 말이.. 2024. 11. 7.
백준 게리맨더링 2 [17779] 파이썬(Python) 코드 + 해설 문제 설명재현시는 𝑁 × 𝑁  크기의 격자로 표현되며, 각 격자는 구역을 의미합니다. 각 구역에는 인구수가 주어집니다. 시장은 공정한 선거구 획정을 위해 다음과 같은 규칙으로 다섯 개의 선거구로 나누려고 합니다.기준점 ( 𝑥,𝑦 )와 경계의 길이 𝑑1,𝑑2를 정합니다. (1≤𝑥경계선을 긋습니다:1번 경계선: (𝑥,𝑦)부터 (𝑥+𝑑1 , 𝑦−𝑑1) 까지 대각선2번 경계선: (𝑥,𝑦)부터 (𝑥+𝑑2,  𝑦+𝑑2) 까지 대각선3번 경계선: (𝑥+𝑑1,𝑦−𝑑1)부터  𝑥+𝑑1+𝑑2, 𝑦−𝑑1+𝑑2)까지 대각선4번 경계선: (𝑥+𝑑2,𝑦+𝑑2) 부터 ( 𝑥+𝑑2+𝑑1, 𝑦+𝑑2-𝑑1)까지 대각선경계선과 그 안에 포함된 구역은 5번 선거구로 설정.. 2024. 11. 6.
백준 연구소 3 [17142] 파이썬(Python) 코드 + 해설 문제 설명인체에 치명적인 바이러스를 연구하던 연구소에 누군가 침입하여 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 처음에는 모든 바이러스가 비활성 상태이며, 활성 상태인 바이러스는 상하좌우로 인접한 모든 빈 칸으로 동시에 복제되어 퍼지며, 1초가 걸린다.우리는 연구소의 바이러스 위치 중 M개를 선택하여 활성 상태로 변경하려고 한다. 연구소는 N×N 크기의 정사각형이며, 각 칸은 빈 칸(0), 벽(1), 바이러스 위치(2)로 이루어져 있다.활성 바이러스가 비활성 바이러스가 있는 칸으로 가면, 해당 바이러스는 활성 상태로 변한다. 모든 빈 칸에 바이러스를 퍼뜨리는 데 걸리는 최소 시간을 구하는 것이 목표이다.문제 접근이 문제는 다음과 같은 특징을 가진다:바이러스는 동시에 퍼진다... 2024. 11. 6.
백준 이차원 배열과 연산 [17140] 파이썬(Python) 코드 + 해설 문제 설명크기가 3×3인 배열 A가 있다. 배열의 인덱스는 1부터 시작한다. 매 초마다 배열에 연산이 적용된다.R 연산: 배열 A의 모든 행에 대해서 정렬을 수행한다. 행의 개수 ≥ 열의 개수인 경우에 적용된다.C 연산: 배열 A의 모든 열에 대해서 정렬을 수행한다. 행의 개수 각 행 또는 열에 있는 수를 정렬하려면, 각각의 수가 몇 번 나왔는지 알아야 한다. 그 다음, 수의 등장 횟수가 커지는 순으로, 그러한 것이 여러 개면 수가 커지는 순으로 정렬한다. 그 다음에는 배열 A에 정렬된 결과를 다시 넣어야 한다. 정렬된 결과를 배열에 넣을 때는, 수와 등장 횟수를 모두 넣으며, 순서는 수가 먼저이다.예를 들어, [3,1,1]에는 3이 1번, 1이 2번 등장한다. 따라서, 정렬된 결과는 [3,1,1,2]가.. 2024. 11. 5.
728x90