일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코딩테스트
- 브루트포스
- 킥스타트
- 프로그래머스
- dp
- 그래프
- 파이썬
- PYTHON
- 알고리즘
- DFS
- 코딩
- BFS
- 구글 킥스타트
- google coding competition
- 운영체제
- 리눅스
- 딥러닝
- CSS
- kick start
- 순열
- 백준
- 동적 프로그래밍
- 코딩 테스트
- 프로그래밍
- linux
- 네트워크
- 동적프로그래밍
- OS
- AI
- nlp
- Today
- Total
목록코딩 테스트/백준 (78)
오뚝이개발자
문제 https://www.acmicpc.net/problem/9465 9465번: 스티커 문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다. 모든 스티커를 붙일 수 없게된 상냥이는 각 스티커에 점 www.acmicpc.net 생각의 흐름 동적프로그래밍의 핵심 1) 전체 과정 중 반복되는 작은 단계 찾기 2) 해당 단계에서의 최대 혹은 최소값 찾기 3) 갱신..
문제 https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 생각의 흐름 동적 프로그래밍을 사용하여 dp[i]에 2xi를 채우는 경우의 수를 계산하여 넣으면 된다. 점화식은 dp[i]=dp[i-2]*2+dp[i-1]이 되는데 이유는 다음과 같다. (i-1) 개 2x1 (i-2)개 2x1 2x1 (i-2)개 1x2 1x2 (i-2)개 2x2 위의 그림과 같은 경우가 있는데, 이 중 두번째 경우는 첫번째 경우에 포함이 될 수 있다. 따라서 dp[i-2]*3이 아닌 dp[i-2]*2가 ..
문제 https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 이고, 길이는 3이다. www.acmicpc.net 생각의 흐름 그리 길지않기 때문에 코드로 설명을 대신한다. 코드 # 백준 11722 N = int(input()) arr = list(map(int, input().split())) dp = [1]*N for i in range(N): for j in range(i): if arr[i]
문제 https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 생각의 흐름 이전에 포스팅한 카드 구매하기 2와 반대로 생각하면 된다. 좀 더 쉽게 말해 그 때 min을 찾았던 것을 max로 수정해주면 된다. 코드 # 백준 11052 N = int(input()) card = [0] card += list(map(int, input().split())) # dp[i]의 값은 i개의 카드를 구매하는데 필요한 최대비용 dp = [0] * (N+1) dp[1] = c..
문제 https://www.acmicpc.net/problem/16194 16194번: 카드 구매하기 2 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 생각의 흐름 단순한 동적프로그래밍 문제이다. dp[i]에 담긴 값이 카드 i개를 고르기 위해 필요한 최소비용이라 하고 계산을 점진적으로 해나아간 뒤 마지막 dp[N]을 출력하면 된다. 깨달은 점 가끔씩 list의 인덱스가 0부터 시작하여 값과의 매칭이 어려운 경우가 있다. 예컨대, 이 문제의 경우 card[0]에는 카드 1개를 고를 때의 값이 담겨 있다. 이런 경우 인덱스를 고려하여 계산하기가 ..
문제 https://www.acmicpc.net/problem/3055 3055번: 탈출 문제 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제일 친한 친구인 비버의 굴로 가능한 빨리 도망가 홍수를 피하려고 한다. 티떱숲의 지도는 R행 C열로 이루어져 있다. 비어있는 곳은 '.'로 표시되어 있고, 물이 차있는 지역은 '*', 돌은 'X'로 표시되어 있다. 비버의 굴은 'D'로, 고슴도치의 위치는 'S'로 나 www.acmicpc.net 생각의 흐름 정말 너무 미운 문제다...ㅜㅜ 이거때문에 코딩 그만둘까 생각함... 진짜 꿈에서도 이 문제 푸는 꿈 꾼 듯...정답률이 ..
문제 https://www.acmicpc.net/problem/13023 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 생각의 흐름 전형적인 DFS 문제이다. 문제의 요점은 A-B, B-C, C-D, D-E인 친구관계가 존재하는지를 조사하는 것이다. adjacent list를 이용하여 연결관계에 대한 정보를 저장하고 시작점을 vertex 0부터 n-1까지 돌아가면서 dfs를 사용하여 depth가 4이상이 되는 subgraph가 존재하는지를 판별하면 된다. 코드 n, m = map(int, input().split()) adj_lst = [[] for i in range(n)] for i in range(m): a,..
문제 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마 www.acmicpc.net 생각의 흐름 일반적인 BFS 문제이다. 처음에 행렬을 하나씩 돌면서 1인 곳의 위치 (x,y)를 q에 넣어주고, 여기서 하나씩 빼서 ..