문제 문제 N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. 출력 첫째 줄에 경우의 수를 출력한다. 문제 풀이 투포인터 알고리즘을 활용하면 쉽게 풀 수 있는 문제이다. 초기 스타트시 투포인터를 시작위치에 두고 sum 값이 더 크다면 left 값을 이동하고 작다면 right 값을 이동시켜 주면서 ..
문제 문제 2차원 배열이 주어졌을 때 (i, j) 위치부터 (x, y) 위치까지에 저장되어 있는 수들의 합을 구하는 프로그램을 작성하시오. 배열의 (i, j) 위치는 i행 j열을 나타낸다. 입력 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 합을 구할 부분의 개수 K(1 ≤ K ≤ 10,000)가 주어진다. 다음 K개의 줄에는 네 개의 정수로 i, j, x, y가 주어진다(1 ≤ i ≤ x ≤ N, 1 ≤ j ≤ y ≤ M). 출력 K개의 줄에 순서대로 배열의 합을 출력한다. 배열의 합은 231-1보다 작거나 같다. 문제 풀이 개인적으로..
문제 문제 동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다.동호는 규완이를 위한 깜짝 선물을 준비했다. 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다. 동호는 가능하면 가장 짧은 문자열을 만들려고 한다.동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다. 출력 첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다. 문제풀이 문제안에 문자열의 보다보면 답이 있는 문제 였다. 입..
문제 문제풀이 result 값의 길이를 t 만큼 만들려고 할 때, 현재 문자열의 길이가 p 순서의 번호보다 작은 것만 고려를 한다면 어렵지 않게 풀 수 있는 문제이다. 나의 답안 public static String solution(int n, int t, int m, int p) { String game = " " + Integer.toString(0, n); String answer = ""; int time = p; int num = 1; while (answer.length() = game.length()) { game += Integer.toString(num, n); num++; } else { answer += game.charAt(time) + ""; time..
문제 문제 풀이 1씩 증가하는 반복문에 + 1~10 까지 증가하는 두개의 반복문으로 매일 진행되는 할인행사물품의 수를 계산하고, 그 계산된 값과 구매하기 원하는 물품의 개수를 비교하였을 때 할인 되는 제품이 더 많이 남아 있는 경우의 날만 계산하여 카운팅하고 반환하는 문제이다. 나의 답안 public static int solution(String[] want, int[] number, String[] discount) { int answer = 0; Map wantMap = new HashMap(); for (int i = 0; i < want.length; i++) { wantMap.put(want[i], number[i]); } for (int i = 0; i discCount){ flag= fal..
문제 문제 풀이 visited 배열을 통해 방문하지 않은 노드를 방문을 하여 피로도를 차감 시키는 dfs 방식으로 처리 하였다. 완전 검색트리를 활용하여야 하기 때문에 다음 재귀함수를 호출하고 나면 다시 visited를 false 처리를 하면서 다음번에 해당 던전을 체크가 가능하다. 나의 답안 static boolean[] visited; static int answer = 0; public static int solution(int k, int[][] dungeons) { visited = new boolean[dungeons.length]; dfs(0, k, dungeons); return answer; } private static void dfs(int depth, int k, int[][] du..