목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제풀이 자기 자신도 길이에 포함시키므로 DP 배열의 값을 1로 초기화한다. 이중 반복문을 사용하면 간단히 풀린다. DP[y]는 y까지의 수열에서 가장 긴 부분의 수열 길이를 의미한다. y는 1부터 N까지, x는 1부터 y까지 DP[y]는 DP[x]의 값들을 계속 비교하면서 가장 큰 값+1을 집어넣는다. 코드 #i..

문제 https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 문제풀이 스티커는 하나를 골랐으면 바로 옆 대각선 1칸의 스티커밖에 고르지 못한다. 또는 오른쪽 스티커를 아예 고르지 않고 2칸 옆에 있는 스티커를 고를 수 있다. 왼쪽부터 오른쪽으로 진행하면서 스티커를 고른다고 가정해보자. 가운데에 있는 70원짜리를 고르려고 할 때, 50+70=120의 경우와 30+10+70=110의 경우가 있다. 이를 식으로 세우면 DP[1][x]=70 + m..

문제 https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 문제풀이 N이 90까지니까 개수가 별로 안 크겠지라고 생각하고 int형 배열을 사용했다가 틀리고 long long형으로 고치고 맞았다. DP문제는 웬만하면 long long형을 쓰는 게 나을 것 같다. 이 문제에는 규칙이 있다. 1. 첫 번째 숫자는 무조건 1로 시작한다. 2. 1로 연속된 숫자는 불가능하다. 1, 2번을 합치면 모든 이친 수는 10으로 시작한다는 것을 알 수 있다..

문제 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 문제풀이 처음에 DFS로 풀었는데 계속 시간 초과가 뜨길래 질문을 보니 가중치 없는 최단거리는 BFS로 풀어야 된다는 글을 봤다. https://www.acmicpc.net/board/view/27386 그래서 코드를 지우고 다시 BFS로 풀었다. 다음 칸을 갈 때 방문했으면 현재 거리가 최단거리일 때만 다음칸으로 이동하고, 방문을 하지 않은 칸이라면 방문을 하게 했..

문제 https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 문제풀이 DFS보다 BFS로 푸는 것이 좋아 보여서 BFS로 풀었다. 단순히 큐에 각 노드 번호와 촌수를 넣고 연결된 노드를 모두 큐에 넣었으면, 다음으로 넘어가고 이전 노드를 pop 하여 큐에서 삭제하는 방식이다. 큐가 비어있지 않은 상태로 원하는 노드에 도착하면 촌수를 return 하여 촌수를 출력하고, 큐가 비게 되어 반복문이 종료되면 노드가 연결되어있지 않아 촌수를..

문제 https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제풀이 처음에는 단순히 DP[10] = DP[10-1] + DP[10-2] + DP[10-5]를 하려고 했다. 하지만 이렇게 누적시키게 되면 숫자 구성은 같지만 순서만 다른 것도 포함이 되므로 틀린 답이다. 동전 단위 개수만큼 반복문을 돌리고, n원부터 k원 까지 DP[x] = DP[x-n]값을 누적시킨다. 처음 n원으로 n원을 만들때 DP[n]=DP[n-n]일 때, DP[0]의 값을 사용하..