2024/02 3

백준 11659 누적합 [JAVA]

리뷰 시간초과 List로 입력을 받고 반복문으로 각 값을 얻어서 누적합을 구했다. 시간초과 문제를 해결하기 위해, List에 입력받을 때 바로 각 수를 더한 뒤 누적합으로 입력받았다. 문제 더보기 문제 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 제한 1 ≤ N ≤ 100,000 1 ≤ M ≤ 100,000 1 ≤ i ≤ j ≤ N 예제 입력 1 복사 5 3 ..

ALGORITHM 2024.02.09

백준 2485 가로수 [JAVA]

리뷰 시간초과 모든 수를 각각 비교해 최대공약수(간격)를 계산한 뒤, 모든 가로수 값을 HashSet에 저장해 중복을 확인했다. 시간초과 문제를 해결하기 위해 유클리드 호제법으로 최대공약수를 구하고, 추가한 가로수는 HashSet에 저장하지 않고 count++ 연산으로 체크했다. 더보기 두 부분 다 수정해야 한다. HashSet을 삭제해도 모든 수를 반복문 돌려서 최대공약수를 구하면 시간초과가 뜨고, 유클리드호제법을 사용해 최대공약수를 구하더라도 HashSet으로 개수를 카운트하면 메모리 초과가 뜬다. 공부한 것 여러수의 최대공약수 - 유클리드호제법 먼저 두 수를 골라 최대공약수를 구한다. 그 값(최대공약수)과 남은 수 중 하나의 최대공약수를 구한다. 위 과정을 반복한다. 두수의 최대공약수 - 유클리드호..

ALGORITHM 2024.02.08

백준 11650 좌표 정렬하기 [JAVA]

리뷰 시간초과 2차원 배열로 값을 입력받은 후, 반복문을 돌려서 모든 값을 하나씩 비교했다. 공부한 것 1차원 배열 정렬 시 사용하는 Arrays.sort(arr)의 인자로 Comparator인터페이스의 Compare메소드를 오버라이딩해 추가하면 2차원 배열도 정렬할 수 있다. Arrays.sort(arr, new Comparator() { //한번만 사용되기때문에 익명클래스(익명구현객체) 사용 public int compare(int[] arr1, int[] arr2) { //2차원 배열을 2개씩 비교 if (arr1[0] != arr2[0]) { // 두 2차원 배열의 x값 비교 return arr1[0] - arr2[0]; // 오름차순 정렬(양수면 순서바꿈, 음수면 그대로둠). 앞 뒤 바꾸면 내림..

ALGORITHM 2024.02.06