DP 문제다! 아직도 DP에서 실수가 많다... 완탐으로는 불가능하니까 중복되는 정보를 줄여보자 테이블은 d[현재위치][남은 점프 수]로 잡는다 처음에 틀렸던 이유는 이전에 뛰어온 곳을 저장하려고 했기 때문이였다 현재위치만 가지고 다음에 뛰어갈 곳을 구해서 정보를 업데이트하면 되는데 테이블은 이전에 정보를 가지지도 않으면서 나는 이전에 어디서 왔는지 정보를 들고다녔다 처음 테케만 나오고 바로 틀렸따~! 틀린 소스코드 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 31 32 33 34 35 36 37 #include #include #include #include using namespace std; cons..
조금은 수학적인 문제다 3N+3 = 3(N+1)로 바꿀 수 있다 그럼 N이 홀,짝으로 나눠서 경우를 생각해보면 된다 3은 홀수 이므로 짝수가 되어 2로 나누어도 3은 계속 남는다 이 원리를 생각해보자! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include #include using namespace std; #define ll long long int main() { //freopen("input.txt", "r", stdin); int tcase; scanf(" %d", &tcase); int c = 1; while (tcase--) { ll n; scanf(" %lld", &n); while (n % 2 == 0) n /= 2; string ans = (n == 1..
투 포인터를 이용하면 쉽게 풀 수 있다 간격을 보면서 끝까지 답을 갱신해 가면 나온다! 소스코드 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 #include #include #include using namespace std; int n, k; int arr[1010]; int main() { //freopen("input.txt", "r", stdin); int tcase; scanf(" %d", &tcase); int c = 1; while (tcase--) { memset(arr, 0, sizeof(arr)); scanf(" %d %d", &n, &k); for (int i = 0; i
이분탐색을 통해 풀 수 있는 문제다 X일을 mid로 설정해보자 그 후 정렬을 하고 mid값으로 설정했을 때 숙제를 할 수 있는지 하나하나 확인해보자! 시간이 좀 걸린다..! 소스코드 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 31 32 33 34 35 36 37 38 39 40 41 #include #include #include #include using namespace std; #define ll long long const int MAXN = 1e6 + 5; int N; pair arr[MAXN]; bool solve(ll mid) { ll now = mid-1; for (int i = 0; i ..