[BOJ/Python] 14719번: 빗물 | 시뮬레이션
·
Program Solving/Python
https://www.acmicpc.net/problem/14719 문제2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까? 입력첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500)두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다.따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다. 출력2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라.빗물이 전혀 고이지 않을 경우 0을 출력하여라.  코드h, w = map(int, in..
[BOJ/Python] 10709번: 기상캐스터 | 시뮬레이션
·
Program Solving/Python
https://www.acmicpc.net/problem/10709 문제JOI시는 남북방향이 H 킬로미터, 동서방향이 W 킬로미터인 직사각형 모양이다. JOI시는 가로와 세로의 길이가 1킬로미터인 H × W 개의 작은 구역들로 나뉘어 있다. 북쪽으로부터 i 번째, 서쪽으로부터 j 번째에 있는 구역을 (i, j) 로 표시한다.각 구역의 하늘에는 구름이 있을 수도, 없을 수도 있다. 모든 구름은 1분이 지날 때마다 1킬로미터씩 동쪽으로 이동한다. 오늘은 날씨가 정말 좋기 때문에 JOI시의 외부에서 구름이 이동해 오는 경우는 없다.지금 각 구역의 하늘에 구름이 있는지 없는지를 알고 있다. 기상청에서 일하고 있는 여러분은 각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 예측하는 일을 맡았다...
[BOJ/Python] 2578번: 빙고 | 시뮬레이션
·
Program Solving/Python
https://www.acmicpc.net/problem/2578 문제 입력첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 빙고판에 쓰여진 수와 사회자가 부르는 수는 각각 1부터 25까지의 수가 한 번씩 사용된다. 출력첫째 줄에 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지 출력한다.  코드def check_bingo(board): count = 0 for row in board: if all(x == 0 for x in row): count += 1..
[BOJ/Python] 2133번: 타일 채우기 | DP bottom-up
·
Program Solving/Python
https://www.acmicpc.net/problem/2133 문제3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력첫째 줄에 경우의 수를 출력한다.  코드n = int(input())dp = [1, 3, 11]if n % 2 == 1: print(0)elif n  풀이위를 통해 dp[k] = dp[k-1] X dp[1] + 2 X (dp[0] + dp[1] + ... + dp[k-2]) 와 같은 점화식을 얻을 수 있었음.n이 홀수일 때는 무조건 답이 0이므로 dp 리스트에 n//2 인덱스 자리에 저장함.항상 2가지를 더해줘야 하므로 dp[0]엔 1을 저장해두었음.
[BOJ/Python] 11054번: 가장 긴 바이토닉 부분 수열 | LBS
·
Program Solving/Python
https://www.acmicpc.net/problem/11054 문제수열 S가 어떤 수 Sk를 기준으로 S1    > Sk+1 > ... SN-1 > SN을 만족한다면, 그 수열을 바이토닉 수열이라고 한다.예를 들어, {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가 주어졌을 때, 그 수열의 부분 수열 중 바이토닉 수열이면서 가장 긴 수열의 길이를 구하는 프로그램을 작성하시오. 입력첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ ..
[BOJ/Python] 2659번: 십자카드 문제
·
Program Solving/Python
https://www.acmicpc.net/problem/2659  문제 위와 같은 십자모양의 한 장의 카드에서, 네 모서리에 1 이상 9 이하의 숫자가 하나씩 씌여 있다. 이 네 개의 숫자 중에는 같은 숫자도 있을 수 있다.모든 가능한 십자 카드가 주어질 때, 각각의 카드는 다음과 같은 '시계수'라는 번호를 가진다. 시계수는 카드의 숫자들을 시계 방향으로 읽어서 만들어지는 네 자리 수들 중에서 가장 작은 수이다. 위 그림의 카드는 시계방향으로 3227, 2273, 2732, 7322로 읽을 수 있으므로, 이 카드의 시계수는 가장 작은 수인 2273이다.입력으로 주어진 카드의 시계수를 계산하여, 그 시계수가 모든 시계수들 중에서 몇 번째로 작은 시계수인지를 알아내는 프로그램을 작성하시오.예를 들어서, 다..
[BOJ/Python] 11444번: 피보나치 수 6 | 도가뉴 항등식
·
Program Solving/Python
https://www.acmicpc.net/problem/11444 입력첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. 출력첫째 줄에 n번째 피보나치 수를 1,000,000,007으로 나눈 나머지를 출력한다.  코드from collections import defaultdictn = int(input())dp = defaultdict(int)dp[0] = 0dp[1] = 1dp[2] = 1def fibonacci(n): if not dp[n]: if n % 2 == 0: fn = fibonacci(n//2) fn_1 = fibonacci(n//2 - 1) dp[n] = ..
[BOJ/Python] 4948번: 베르트랑 공준 | 에라토스테네스의 체
·
Program Solving/Python
https://www.acmicpc.net/problem/4948 입력입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하는 한 줄로 이루어져 있다.입력의 마지막에는 0이 주어진다. 출력각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력한다.  코드def sieve_of_eratosthenes(m, n): is_prime = [True] * (n + 1) is_prime[0], is_prime[1] = False, False for i in range(2, int(n ** 0.5) + 1): if is_prime[i]: for j in range(i * i, n + 1, i): ..
[BOJ/Python] 1934: 최소공배수 | 유클리드 호제법 (Euclidean Algorithm)
·
Program Solving/Python
https://www.acmicpc.net/problem/1934 입력첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 둘째 줄부터 T개의 줄에 걸쳐서 A와 B가 주어진다. (1 ≤ A, B ≤ 45,000) 출력첫째 줄부터 T개의 줄에 A와 B의 최소공배수를 입력받은 순서대로 한 줄에 하나씩 출력한다.  코드def gcd(m, n): while n != 0: t = m%n m, n = n, t return abs(m)t = int(input())for _ in range(t): a, b = map(int, input().split()) print((a * b) // gcd(a, b))   유클리드 호제법2개의 자연수의 최대공..
[BOJ/Python] 2166번: 다각형의 면적 | 신발끈 공식
·
Program Solving/Python
https://www.acmicpc.net/problem/2166 입력첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다. 출력첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.  코드n = int(input())arr = []for i in range(n): arr.append(tuple(map(int, input().split())))area = 0for i in range(n): x1, y1 = arr[i] x2, y2 = arr[(i + 1) % n] area += (x1 * y2) - (x2 * y1)pr..