본문 바로가기

728x90
반응형

전체 글

(122)
[백준 / 2206] 벽 부수고 이동하기 - Python https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 벽을 하나 부순 map과 벽을 부수지 않은 map을 이용하였다. from collections import deque n, m = map(int, input().split()) map = [] for _ in range(n): map.append(list(input())) drow = [-1, 0, 1, 0] dcol = [0, 1, 0, -1] map[0][0] = 1 ..
[백준 / 1987] 알파벳 - Python https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 시간을 줄이는 것이 제일 큰 숙제였다. pop, push 작업이 많은 경우 list를 통해 구현하는 것 보다 deque를 이용하는 것이 월등히 빠르다. import sys from collections import deque row, col = map(int, sys.stdin.readline().split()) graph = [] for _ in range(row): graph.appen..
[백준 / 3190] 뱀 - Python https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 뱀의 위치를 리트스에 저장한다. 다음 칸에 가게 된다면 맨 뒤 위치를 지우고, 다음 위치를 저장해서 길이를 유지한다. 만약 사과를 먹게 된다면 맨 뒤 위치를 지우지 않고, 다음 위치를 저장해서 길이를 늘린다. 만약 다음 위치가 벽이나(N을 넘어가거나 0보다 작아지는 경우), 뱀의 몸이라면(다음 위치가 body리스트 안에 있다면) 해당 이동을 멈추고 현재 시간을 출력한다. import sys N = int..
[백준 / 15686] 치킨 배달 - Python https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 치킨집을 M개만큼 골라아한다 -> 조합(combination) 치킨집 M개를 고른 모든 경우를 계산해준다. def combi(N, start, end, prev=[]): all_set = [] numList = [i for i in range(start, end)] for i in numList: temp = prev[:] temp.append(i) if N == 1: all..
[보기 쉬운 Algorithm] 냅색(Knapsack) 알고리즘 - Python 냅색 알고리즘은 DP(Dynamic Programming)의 한 종류로 많이 쓰이는 방식 중 하나이다. 가방문제에 가장 많이 등장한다! 가방에 담을 수 있는 무게 제한이 있고, 각각의 물건은 무게와 가치가 있다. 가방의 무게를 초과하지 않게 물건을 많이 담아 최고 가치를 가지게 하는 문제이다. for i in range(1, n+1): for j in range(1, k+1): w = thing[i][0] # 물건의 무게 v = thing[i][1] # 물건의 가치 if j < w: # 현재 무게가 물건 보다 작다면 table[i][j] = table[i-1][j] # 위의 값을 그대로 else: table[i][j] = max(table[i-1][j], table[i-1][j-w]+v) https://..
[백준 / 12865] 평범한 배낭 - Python https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 냅색 알고리즘(Knapsack Algorithm) (처음에는 재귀함수로 다 모든 경우를 계산해서 시간이 너무 오래 걸렸다.) n, k = map(int, input().split()) table = [[0]*(k+1) for _ in range(n+1)] thing = [[0, 0]] for i in range(n): thing.a..
[백준 / 9251] LCS - Python https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net s1 = input() s2 = input() s1_len = len(s1) s2_len = len(s2) table = [[0 for _ in range(s2_len+1)] for _ in range(s1_len+1)] for i in range(1, s1_len+1): for j in range(1, s2_len+1): if s1[i-1] == s2..
[백준 / 1034] 램프 - Python https://www.acmicpc.net/problem/1034 1034번: 램프 첫째 줄에 N과 M이 주어진다. N은 행의 개수이고, M은 열의 개수이다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 램프의 상태가 주어진다. 1이 켜져있는 상태이고, 0이 꺼져 www.acmicpc.net 램프는 열 단위로 불이 켜지고, 행에 있는 불의 개수를 세는 거다. 열 단위로 불이 켜지므로 A행과 B행의 램프의 순서가 같다면 둘은 같이 켜질 것이고, 둘이 다르면 다르게 켜질 것이다. 따라서 같은 램프 구조를 가지고 있는 행의 개수를 세면 되는 문제였다. (정말로 간단하게 생각해도 되는 문제였다. 처음에는 재귀함수로 풀었는데 계속 시간초과가 나왔다.) 하지만, 짝수인 경우 껐다켰다 하면..

728x90
반응형