본문 바로가기

알고리즘

(146)
파이선) 파이프 옮기기 - BOJ https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net 이 문제는 총 세 번의 재귀함수로 풀어봤었다. 그러다 모두 80퍼센트 쯤에서 시간초과가 발생했다. 첫번째 코드 import sys input = sys.stdin.readline n = int(input()) arr = [] for _ in range(n): arr.append(list(map(int, input().split()))) answer = 0 def dfs(x..
파이썬) 말이 되고픈 원숭이 - BOJ https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net from collections import deque import sys input = sys.stdin.readline k = int(input()) w, h = map(int, input().split()) w, h = h, w arr = [] for _ in range(w): arr.append(list(map(int, input().split()))) # visit = [[..
파이썬) 벽 부수고 이동하기 - BOJ https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net from collections import deque import sys input = sys.stdin.readline n, m = map(int, input().split()) arr = [list(map(int, input().rstrip())) for _ in range(n)] visit = [[[0] * 2 for _ in range(m)] for _ in ran..
파이썬) 2 X N 타일링 - BOJ https://www.acmicpc.net/problem/11726 n = int(input()) dp = [0] * 1001 dp[1] = 1 dp[2] = 2 dp[3] = 3 if n
파이썬) 듣보잡 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net n, m = map(int, input().split()) dic = {} arr = [] arr2 = [] for _ in range(n): arr.append(input()) for _ in range(m): arr2.append(input()) inter = list(set(arr) & set(arr2)) print(len(inter)) inter.sort() for i in inter: ..
파이썬) 차집합 - BOJ https://www.acmicpc.net/problem/1822 1822번: 차집합 첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1 ≤ n(A), n(B) ≤ 500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소 www.acmicpc.net 이문제는 이분탐색으로 분류된 문제였다. 그래서 이분탐색으로 풀어봤다. na, nb = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) b.sort() answer = 0 for target in a: temp = False start =..
파이썬) 상자넣기 - BOJ https://www.acmicpc.net/problem/1965 1965번: 상자넣기 정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 www.acmicpc.net 이 문제는 "가장 긴 증가하는 부분 수열2"문제와 똑같은 문제이다. 현재 인덱스 i보다 크면서 인덱스 i에 해당하는 숫자보다 큰 숫자를 찾아야하는 문제이다. from bisect import bisect_left n = int(input()) arr = list(map(int, input().split())) dp = [] for i in range(len(arr)): if not dp or dp[-1] ..
파이썬) 파도반 수열 - BOJ https://www.acmicpc.net/status?user_id=dlwnsgml203&problem_id=9461&from_mine=1 t = int(input()) for _ in range(t): dp = [0, 1, 1, 1, 2, 2, 3, 4, 5, 7, 9] n = int(input()) if n