서론학교수업에서 코딩테스트를 대비하는 수업이 있습니다.거기서 수업시간에"정수N개가 입력되고, 그 수열중 몇개를 골라서합이 M이 되는 부분수열을 만들수 있는가" 를 어떻게 풀수있을까?고민만 시키고 수업은 끝났습니다.저는 나름 알고리즘에 이제 자신이 있었는데전혀 풀 방법이 안떠오름에 충격을 먹었습니다재귀함수로 2에n승으로 하는건가..?하면서 말이죠바로 이런문제를 검색했는데알고리즘 사이트엔 없다고 뜨더군요포기할수 없는 저는 바로 gpt에 세세하게 물어보고 코드를 보고 이해하고안보고 적을수 있게 공부를 했습니다할것도 많은데 github에 잔디도 못채우고..이걸 해야하나 싶었지만제가 못하는걸 공부하는 열정이성공의 길이라고 믿기에그냥 했습니다 ㅎㅎ하는것만 해선 아무 발전이 없더라구요원래는 가능한지 여부만 묻는 문제..
이번 문제를 풀며 지금 떠오르는 배운점들1.배열, 리스트, 큐 등은 지역변수로 쓰는게 좋다왜? -> 전역변수로 쓰면, 2번째 테스트케이스등을 할때, 남은 데이터로 오류가 날수있다. 2.arrayList에서 뒤의 인덱스를 사용하기위해선, 안쓰더라도 앞에 빈껍데기 객체라도 넣어놔야한다.why?) -> 배열과 다르게 앞에서부터 채워지는 것으로 보임 3. 전역변수, 지역변수를 적절히 숫자를 나눠 사용해준다.왜?) -> 매개변수로 너무 많은 변수가 있으면 가독성이 떨어지므로 4. 위상정렬을 써서 문제를 푸는법. 알바하며 풀은 흔적코드import java.util.*;import java.io.*; class Main { static int n; // 노드 갯수 static int k; //..
https://www.acmicpc.net/problem/14002 풀이1.이중for문으로 1~n번째까지의 요소들까지의 증가수열의 갯수를 알아내기2. stack을 이용하여 앞서 기록한 arr[](i에 맞춰서 넣어진 수열 요소들)과 dp[](i 숫자에 맞춰진 증가수열의 숫자)를 이용해 역으로 push한것을 pop으로 빼내면서 증가수열의 요소를 복원하는 식입니다. 정답코드package practicePc;import java.io.*;import java.util.Stack;import java.util.StringTokenizer;public class Main { private static final BufferedReader br = new BufferedReader(new InputStreamRead..