투 포인트 알고리즘 이용 import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int n, int m, int[] arr) { int answer = 0; //최대값 int sum = 0; // lt ~ rt까지 연속 부분 수열의 합 int lt = 0; for (int rt = 0; rt m) { sum -= arr[lt++]; //lt값을 빼고나서 증가 } if (sum == m) { answer ++; } } r..
sliding window 알고리즘을 사용하면 된다. 시간 복잡도는 O(N^2)이다. answer -> 최대값, sum -> window안의 값 처음에 0~K전까지의 합(38) 구하여 answer에 초기화 해둔다. sum에도 38이 저장되어있고 for문이 돌면서 +(arr[i] - arr[i-k])를 해준다. import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int n, int k, int[] arr) { int answer = 0; //최대값 int sum = 0; //window 안의..
25번과 유사한 문제 A, B 두 집합을 먼저 오름차순 정렬해둔 후 arr1[p1] < arr2[p2]면 p1(작은 수)을 하나 증가시킨다. arr1[p1] == arr2[p2]인 경우는 answer에 값을 저장 후 둘 다 동시에 증가시킨다. import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public ArrayList solution(int n, int m, int[] arr1, int[] arr2) { ArrayList answer = new ArrayList(); Arrays.sort(arr1); //오름차순 정렬 ..
import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Scanner; public class Main { public ArrayList solution(int n, int m, int[] arr1, int[] arr2) { ArrayList answer = new ArrayList(); int p1 = 0, p2 = 0; while (p1 < n && p2 < m) { if(arr1[p1] < arr2[p2]) answer.add(arr1[p1++]); //p1의 값 먼저 add하고 1증가 else answer.add(arr2[p2++]); } while(p1
4중 for문 사용해야 한다. n=4, m=3 먼저 멘토, 멘티로 짝지을 수 있는 모든 경우의 수 체크 (멘토, 멘티) 짝지은 멘토, 멘티에서 조건에 만족하는지 체크 멘토, 멘티의 등수를 찾고 모든 테스트에서 멘토가 앞선다면 count++ import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Scanner; public class Main { public int solution(int[][] arr, int n, int m) { int answer = 0; for (int i = 1; i
2차원 배열을 생성하여 이중for문으로 문제를 푸는데 arr[n+1][6] //1번부터 사용할 거니까 n+1 for i(1~5) //명수 for j(1~5) //명수 for k (1~5) //학년 a[i][k] == a[j][k] //i번 학생의 k학년과 j번 학생의 k학년이 같은지 비교 참이면 cnt ++; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Scanner; public class Main { public int solution(int n, int[][] arr) { int answer=0, max=Integer.MIN_VALUE; for (int i = 1; i
이중for문 사용 상,하,좌,우 비교했을 때 큰 값 없으면 count ++ 방향 배열 int [] dx ={-1,0,1,0} int [] dy ={0,1,0,-1} nx = i+dx[k] ny = i+dy[k] 경계선 처리는 어떻게 하는가? 1행1열(5)인 경우 가장자리까지 비교를 해버리면 ArrayIndexOutOfBoundsException 에러 발생 0번 인덱스까지 존재하는데 -1번 인덱스까지 본 경우 nx >= 0 && nx = 0 && ny < n if 문에 코드 추가 경계선 처리를 먼저 확인 한 후 봉우리 확인을 해야하기 때문에 앞쪽에다 추가해준다. import java.lang.reflect.Array; import java.util.ArrayList; import jav..