본문 바로가기

728x90

파이썬

(171)
[백준] 14938번 서강그라운드 [Python] - 플로이드 워셜, 데이크스트라 지역의 개수 n, 수색범위 m, 길의 개수 r에 대해서 각 지역마다 주어진 아이템 수와 지역을 연결하는 길의 길이가 주어질때, 얻을 수 있는 최대 아이템 개수를 구하는 문제 $($수색 범위를 넘어가는 먼 지역은 탐색할 수 없음$)$ 더보기 문제 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 하는 게임이다. 서강그라운드에서 1등을 하면 보상으로 치킨을 주는데, 예은이는 단 한번도 치킨을 먹을 수가 없었다. 자신이 치킨을 못 먹는 이유는 실력 때문이 아니라 아이템 운이 없어서라고 생각한 예은이는 낙하산에서 떨어질 때 각 지역에 아이템 들이 몇 개 있는지 알려주는 프로그램을..
[백준] 14502번 연구소 [Python] 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1..
[백준] 12851번 숨바꼭질 2 [Python] 수빈$($=N$)$이가 동생 $($=K$)$ 을 찾는 데 걸리는 최소 시간을 구하는 문제 +1, -1, x2 : 1초 소요 추가로 최소 소요 시간이 걸리는 방법의 수도 구해야한다. 더보기 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N$(0 ≤ N ≤ 100,000)$에 있고, 동생은 점 K$(0 ≤ K ≤ 100,000)$에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 그리고, 가장 빠른 시간으로 찾는 방법이 몇 가지 인지 구하..
[백준] 9935번 문자열 폭발 [Python] 두 개의 문자열이 주어진다. 첫 문자열에서 두 번째 문자열이 포함되면 그 문자열을 제거하고 남은 부분이 이어 붙인다. 이어 붙여진 문자열에 두 번째 문자열이 포함되어 있다면 위 과정을 계속 반복한다. 남은 문자열이 존재하면 그 문자열을 출력하고, 없다면 "FRULA"를 출력한다. 더보기 문제 상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다. 폭발은 다음과 같은 과정으로 진행된다. 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다. 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다. 폭발은 폭발 문자열이 문자열에 없을 때까지 계..
[백준] 1987번 알파벳 [Python] RxC 크기의 보드 각 칸에 알파벳이 놓여있다. 현재 말이 $($1, 1$)$에 놓여 있고, 상하좌우로 인접한 칸으로 이동 가능하고, 한 번도 마주친적 없는 알파벳이 있는 곳으로만 이동 가능합니다. 말이 최대 지날 수 있는 칸 수를 구하는 문제 더보기 문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 $($1행 1열$)$ 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구..
[백준] 11054번 가장 긴 바이토닉 부분 수열 [Python] 수열 S가 어떤 수 $S_k$를 기준으로 $S_1 S_N$을 만족한다면, 그 수열을 바이토닉 수열이라고 한다. 주어진 수열의 가장 긴 바이토닉 부분 수열의 길이를 구하는 문제 더보기 문제 수열 S가 어떤 수 $S_k$를 기준으로 $S_1 S_{k+1} > ... S_{N-1} > S_N$을 만족한다면, 그 수열을 바이토닉 수열이라고 한다. 예를 들어, {10, 20, 30, 25, 20}과 {10, 20, 30, 40}, {50, 40, 25, 10} 은 바이토닉 수열이지만, {1, 2, 3, 2, 1, 2, 3, 2, 1}과 {10, 20, 30, 40, 20, 30} 은 바이토닉 수열이 아니다. 수열 A가 주어졌을 때, 그 수열의 부분 수열 중 바이토..
[백준] 10830번 행렬 제곱 [Python] NxN 행렬 A의 B 제곱을 구하는 문제 각 원소를 1,000으로 나눈 나머지를 출력 더보기 문제 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, $A^B$의 각 원소를 1,000으로 나눈 나머지를 출력한다. 입력 첫째 줄에 행렬의 크기 N과 B가 주어진다. $(2 ≤ N ≤ 5, 1 ≤ B ≤ 100,000,000,000)$ 둘째 줄부터 N개의 줄에 행렬의 각 원소가 주어진다. 행렬의 각 원소는 1,000보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄부터 N개의 줄에 걸쳐 행렬 A를 B제곱한 결과를 출력한다. https://www.acmicpc.net/problem/10830 아래 규칙으로 홀/짝에 대해서 분할 정복 $A = A..
[백준] 13172번 Σ [Python] N면체 주사위의 숫자 합이 S라고 하자. M개의 주사위의 각 기댓값의 합을 기약분수로 나타낼 때, 그 값을 1,000,000,007로 나눈 나머지 값을 출력하는 문제 더보기 문제 실제로 존재하는지 아닌지는 차치하고, 당신에게 삼면체 주사위가 있어서 이 주사위를 굴린다고 생각해보자. 주사위를 굴렸을 때 각 면이 나올 확률은 모두 동일하게 1/3 이다. 한 면에는 1, 다른 한 면에는 2, 남은 한 면에는 4가 적혀있다고 하면 주사위를 굴렸을 때 나오게 되는 숫자의 기댓값은 과연 몇일까? 간단하게도 셋의 평균인 7/3이 될 것이다. 이 문제를 조금 확장해서, "N면체 주사위의 각 면에 적힌 수가 주어졌을 때, 주사위를 굴렸을 때 각 면이 나올 확률이 모두 같다면 주사위를 굴렸을 때 나오게 되는 수의 기댓값은..
[백준] 2448번 별 찍기 - 11 [Python] 아래 예제를 보고 규칙을 유추하여 주어진 N$(=3*2^k)$에 대해서 별을 출력하는 문제 24 * * * ***** * * * * * * ***** ***** * * * * * * ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * * * * * * * * * * * * * * * * * * * ***** ***** ***** ***** ***** ***** ***** ***** 더보기 문제 예제를 보고 규칙을 유추..
[백준] 1504번 특정한 최단 경로 [Python] - 데이크스트라 무방향 그래프에 1번에서 u, v 노드를 거쳐서 N번 노드로 가는 최단 경로의 길이를 구하는 문제 1-u-v-N, 1-v-u-N 의 규칙만 지켜서 최단 경로를 구하면 된다. 불가능 할 때, -1을 출력한다. 더보기 문제 방향성이 없는 그래프가 주어진다. 세준이는 1번 정점에서 N번 정점으로 최단 거리로 이동하려고 한다. 또한 세준이는 두 가지 조건을 만족하면서 이동하는 특정한 최단 경로를 구하고 싶은데, 그것은 바로 임의로 주어진 두 정점은 반드시 통과해야 한다는 것이다. 세준이는 한번 이동했던 정점은 물론, 한번 이동했던 간선도 다시 이동할 수 있다. 하지만 반드시 최단 경로로 이동해야 한다는 사실에 주의하라. 1번 정점에서 N번 정점으로 이동할 때, 주어진 두 정점을 반드시 거치면서 최단 경로로 이동..
[백준] 17070번 파이프 옮기기 1 [Python] - 다이나믹 아래 규칙에 의해서 NxN 격자판에서 $($1, 1$)$에서 $($N, N$)$으로 파이프를 연결하는 경우의 수를 구하는 문제, 불가능할 경우 0을 출력 처음에는 $($1, 1$)$, $($1, 2$)$에 걸친 파이프가 놓여있다. 파이프를 이동하려면 위 그림처럼 가로는 오른쪽, 세로는 아래, 대각선은 오른쪽, 아래, 오른쪽 아래에 아무것도 없어야 합니다. 격자 내에 벽이 존재할 수 있습니다. 더보기 문제 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 $(r, c)$로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 번호이고, 행과 열의 번호는 1부터 시작한다. 각각의 칸은 빈 칸이거나 벽이다. 오늘은 집 ..
[백준] 1043번 거짓말 [Python] N명의 사람들이 일부 또는 모두가 M개의 파티에 참여한다. 그곳에서 지민이가 들키지 않고 거짓말할 수 있는 파티 개수의 최댓값을 구하는 문제 사람마다 번호가 부여되어 있고, N, M이 주어지고, 다음 줄에 이미 진실을 아는 사람의 수와 그 번호가 주어진다. 그 다음 줄 부터는 M개의 파티에 참여하는 사람의 번호가 주어진다. 진실을 아는 사람과 또는 그 사람과 같은 파티에 참여했던 사람들은 모두 진실을 알게 된다. 더보기 문제 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 과장해서 말한다. 당연히 과장해서 이야기하는 것이 훨씬 더 재미있기 때문에, 되도록이면 과장해서..