A,B,C중에 오히려 가장 쉬운 문제가 아니였나 싶다(?) 문제 자체 이해는 어려웠다 S라는 문자열 안에서 등차수열로 이루어진 T라는 문자열을 숨겼다 이 때 문자열 T의 수들 중 최댓값을 찾는 문제다 생각하다보면 문제가 쉬워진다 한번 정리를 해보자 1. 길이가 1일 때 => max(alpha[26]) 중 하나다 2. 길이가 2일 때 => for문을 통해 입력받으면서 보면 된다max(d[26][26]) 3. 길이가 3일 때 => 여기부터 생각해봐야한다 꼭 봐야할까? 길이가 3이상이라면 길이가 2인것들을 무조건 포함해야만 만들 수 있다 따라서 볼 필요가 없다! 2까지만 보면 된다! 그럼 바로 쉬운문제로 변한다! 문제에서 필요로 하는것들만 뽑아내는 능력이 이럴때 쓰이는건가..! 이 문제는 쉬워서 다행히 잘 보..
ABC중에 제일 어려웠던 문제같다.. (0,0) -> (0,x)까지 주어지는 숫자의 길이만큼만 이동해서 가야한다 우선 가장 쉬운경우 1. x길이만큼의 수가 주어지는경우 == 1 2. x보다 큰 수가 주어지는 경우 == 2 (삼각형을 만들면 된다) 3. 위에 둘다 아니라면 그 중에 가장 큰걸로 가보면 된다 만약 나머지 수로 x가 나눠떨어진다면 그만큼만 가면 되는거고 조금 더 필요하면 마지막에 삼각형을 만든다는 생각으로 하나 더 쓰면 된다! 이런걸 빠르게 생각하는게 아직은 좀 어려운듯 하다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include #include using namespace std; int t; int main..
처음에 문제 이해를 잘못했다 문제는 첫번째칸에 가장 큰 수를 만들라는 문제다 그럼 거리를 보고 만약 다른칸에 수가 0이 아니라면 그만큼 옴기면 된다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include #include #include #include using namespace std; int arr[111]; int ans; int main() { int t; scanf(" %d", &t); while (t--) { memset(arr, 0, sizeof(arr)); int n, m; scanf(" %d %d", &n, &m); ans = 0; for (int i = 0; i
방문해야할 곳은 회사 - N개의 고객 - 집 이렇게 12개다 그럼 회사와 집은 고정시켜두고 N개를 next_permutation을 통해 확인하면 된다 10!이기 때문에 시간은 충분하게 나온다! 소스코드 ( Java) 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 42 43 44 45 46 47 48 49 50 51 import java.util.Scanner; public class Solution { public static int[] order = new int[10]; public static int[][] arr = new int[10][2]..