Algorithm

Algorithm/문제

28. 연속 부분 수열

투 포인트 알고리즘 이용 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..

Algorithm/문제

27. 최대 매출

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 안의..

Algorithm/문제

26. 공통 원소 구하기

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); //오름차순 정렬 ..

Algorithm/문제

25. 두 배열 합치기

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

Algorithm/이론

Two Pointer Algorithm

투 포인터 알고리즘 1차원 배열에서 각자 다른 원소를 가리키고 있는 2개의 포인터를 조작해가며 원하는 값 찾을 때까지 탐색하는 알고리즘 리스트에 순차적으로 접근해야 할 때 두 포인트의 위치를 기록하며 처리 처음은 start = end = 0 두 포인터는 항상 start

Algorithm/문제

24. 멘토링 ★★★

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

Algorithm/문제

23. 임시반장 정하기

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

Algorithm/문제

22. 봉우리

이중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..

챛채
'Algorithm' 카테고리의 글 목록 (3 Page)