목록ALGORITHM/BOJ (34)
scone-lemon

https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 1. 전체 코드 (라이브 다시듣기 DFS(2) 활용) package algo1004.DFSBFS; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.LinkedList; ..

https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net package algo0923; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; // 쉬운 계단 수 public class BOJ_10844 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamRead..

https://www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 제대로 돌아가지도 않는 내 코드와, 제대로 돌아가는 구글링 코드 순서! 그냥 DP는 거의 내가 직접 푼다기 보다는 솔루션을 보고 이해하면서 멱살잡혀 끌려가는 느낌이라서 속상하다. 이렇게 문제를 하나하나 채우고 랭킹을 올리고 티어를 올리는게 무슨 소용이 있는가 싶고, 이게 알고리즘 공부인가 싶다가도 그냥 이렇게라도 DP를 체험하다보면 체득이 되지 않을까 하는 생각에 솔루션을 보고 이해라도 하자.. 이렇게 된다. https://velog.io/@jkh..

https://www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 1이랑 별반 다른 문제가 아닌 것 같아서 이상하다는 생각이 들었어도 그대로 짰는데, 계속계속 틀렸다고 떠서 빡쳤다. 대체 뭐가 문제지 싶어서 구글링을 해봐도 단지 배열을 선언해준 크기와 타입이나 위치만 다른 것 같은데 크게 문제될 게 없을 것 같은데 왜 자꾸 틀렸다고 하지 싶었다. 그런데 https://c-king.tistory.com/280 이분 글을 읽어보니까, 10억으로 나눈 나머지를 출력한다는 부분이 문제의 함정같은 것이고, 이 말인 즉슨1..

https://www.acmicpc.net/problem/9655 9655번: 돌 게임 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net 첫번째는, 내 코드! DP 문제라고 하니까 메모이제이션도 쓰고 그래야 할 것 같은데 사실 DP도 메모이제이션도 문제이해도 제대로 잘 안되는 상황에서 꾸역꾸역 DP로 풀었는데 백준에서는 안돌아가는 불쌍한 내 코드.. 사실 DP를 흉내내려고 노력했으나, 점화식은 점화식대로, 출력부는 출력부대로 따로따로 돌아가는 따로국밥! 두번째는, https://dev-gorany.tistory.com/271 여기서 가져온 코드인데 백준에서도 잘 돌아간다! 사실 DP라고 해서, 메모이제이션을 사용한다고 해서, 거창한 걸 저장하지 않아도 ..

https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net 가장 긴 증가하는 부분 수열을 이용해서 풀었다. 백준에서도 잘 돌아가서 기쁘다.. 흑.. 처음에는 반복문 안 조건문에서 memo 조건을 뺐다! 왜냐면 빼도 예제는 잘 돌아가서! 하지만 바로 제출하자 틀렸다는 슬픈 결과를 맞이해야 했다. 대충 감이 오는듯 안오는듯 이해가 안되는것 같기도 하고 되는것 같기도 한데 너무 어렵다...

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문제라는 것을 염두에 두면서 메모이제이션을 계속..

https://www.acmicpc.net/problem/16194 16194번: 카드 구매하기 2 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net BOJ_11052 카드 구매하기와 같은 문제였다. 점화식을 작성하는 부분에서 Math.max 만 min으로 바꿔주면 되는 문제였다. 그리고 이걸 풀고 테스트 출력을 보면서 아차 한건데, 굳이 Arrays.sort를 하지 않아도 배열에 가장 끝 값만 출력해주면 되는 거였다! 그러니까 정렬을 해서 가장 큰값, 작은값을 출력하자가 아니라, 가장 끝 값이 n개를 뽑아야하는 요구사항에 해당하는 답이니까, 해당..