백준 / 14940번 / 쉬운 최단거리 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/14940  코드 from collections import dequen, m = map(int, input().split())grid = [list(map(int, input().split())) for _ in range(n)]distance = [[-1] * m for _ in range(n)]dx = [1, -1, 0, 0]dy = [0, 0, 1, -1]def bfs(i, j): q = deque([(i, j)]) distance[i][j] = 0 while q: x, y = q.popleft() for d in range(4): nx, ny = dx[d] + x, dy..
백준 / 2293번 / 동전 1 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/2293  평소 DP 문제들의 접근에 어려움을 느끼는데 점화식을 세우는 것이 어려운 것 같다. 이번 문제도 점화식 아이디어가 떠오르지 않아서 검색을 통해 공부하고 접근법을 이해하는 데에 노력하였다.단순히 코드를 보는 것만으로 이해가 어려울 때엔 유튜브로 해설 영상을 통해 보다 쉽게 이해할 수 있다.    정답 n, k = map(int, input().split())coins = [int(input()) for _ in range(n)]coins.sort()DP = [0] * (k + 1)DP[0] = 1for c in coins: for i in range(c, k + 1): DP[i] += DP[i - c]print(..
백준 / 2579번 / 계단 오르기 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/2579  다이나믹 프로그래밍 (DP) 문제이다.  계단을 오르며 얻을 수 있는 최댓값을 구하면 되는 문제이지만 조건이 있다.1. 한 번에 한 계단 혹은 두 계단씩 오를 수 있다.2. 연속된 세 개의 계단을 밟을 수 없다.3. 마지막 계단은 반드시 밟아야 한다. 이 세 조건을 만족시키며 답을 구하기 위해 다음과 같이 접근하였다.1. 계단의 개수가 각각 1, 2개일 때     계단의 점수를 더한 값을 출력한다. 2. 계단의 개수가 3개 이상일 때  1) dp 테이블을 계단의 개수만큼 0으로 초기화하여 만든다.  2) dp[0] = 첫 번째 계단의 점수 , dp[1] = 첫 번째 계단의 점수 + 두 번째 계단의 점수를 저장한다.  3) dp[..
백준 / 1931번 / 회의실 배정 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/1931   처음 문제를 보자마자 알고리즘 강의 때 배운 Interval Schduling의 접근법이 생각났다. Earliest finish time을 기준으로 접근하여 가장 빨리 끝나는 것을 선택하면 최적의 답을 구할 수 있는 것이다.  이를 고려하여 입력 받은 회의 시간들을 끝나는 시간을 기준으로 오름차순 정렬하고 제출하였는데 실패하였다. 그 이유는 끝나는 시간이 동일한 회의들에 대한 처리를 해주지 않았기 때문이었다. 따라서 아래와 같이 1. 회의가 끝나는 시간 2. 회의 시작 시간  이렇게 우선 순위를 두어서  .sort(key = lambda x: x[1])이 아닌  .sort(key = lambda x: (x[1], x[0])) ..
백준 / 14888번 / 연산자 끼워넣기 / python 파이썬 / 백트래킹
·
코딩테스트/백준 (python)
문제 :  https://www.acmicpc.net/problem/14888   코드N = int(input())nums = list(map(int, input().split()))op = list(map(int, input().split()))maxn = -1e9minn = 1e9def dfs(n, i, add, sub, mul, div): global maxn, minn if i == N: maxn = max(maxn, n) minn = min(minn, n) return else: if add: dfs(n + nums[i], i+1, add - 1, sub, mul, div) if sub: ..
백준 /1912번 / 연속합 / python 파이썬
·
코딩테스트/백준 (python)
문제 :  https://www.acmicpc.net/problem/1912 내 답안n = int(input())num = list(map(int, input().split()))dp = [0] * ndp[0] = num[0]for i in range(1, n): dp[i] = max(num[i], num[i] + dp[i-1])print(max(dp)) 다이나믹 프로그래밍(DP)으로 해결할 수 있는 문제이다. 현재 숫자를 포함해 앞에서부터 더해온 값과 현재 값을 비교했을 때, 현재 숫자가 크다면 앞에서 더해온 값은 총합을 키우는데 의미가 없다. 따라서 현재까지 더해온 값을 DP 테이블에 저장하고 현재 값과 비교해가면서 문제를 해결할 수 있다.
백준 / 1021번 / 회전하는 큐 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/1021  덱 자료구조를 활용해 구현하면 쉽게 풀 수 있는 문제이다.  큐는 선입선출 방식이지만 덱은 양방향으로 삽입과 삭제 ( popleft, appendleft )가 가능하며,   시간 복잡도가 O(1)이다.  코드import sysfrom collections import dequeinput = sys.stdin.readlineN, M = map(int, input().split())num = list(map(int, input().split()))q = deque(_ for _ in range(1, N + 1))count = 0for i in num: while True: if q[0] == i: ..
백준 / 1541번 / 잃어버린 괄호 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/1541  문제 접근이 문제는 괄호가 없는 식이 주어졌을 때, 예를 들어 2 + 3 - 10 + 5 + 22 라는 식이 있을 때 괄호를 넣어 식의 값을 최소로 만드는 코드를 작성해야 한다. 값이 최소가 되기 위해서는 '-'를 기준으로 사이에 있는 값들에 괄호를 넣으면 최솟값을 구할 수 있다. 따라서 입력을 받을 때 split('-')을 사용해 나누고,  이 나누어진 각각의 문자열의 연산 결과를 구하기 위해 split('+')을 하고, 그 값을 for문을 돌려 더한 뒤 tmp 배열에 넣는다. 이후 배열의 값들을 마이너스 연산을 하면 괄호를 넣어서 계산한 연산 결과와 동일한 결과를 얻을 수 있다. 코드n = input().split('-')t..