-
section4.3알고리즘 2025. 8. 7. 22:26
현수의 아빠는 제과점을 운영합니다. 현수아빠는 현수에게 N일 동안의 매출기록을 주고 연속된 K일 동안의 매출액의 종류를 각 구간별로 구하라고 했습니다. 만약 N=7이고 7일 간의 매출기록이 아래와 같고, 이때 K=4이면 20 12 20 10 23 17 10 각 연속 4일간의 구간의 매출종류는 첫 번째 구간은 [20, 12, 20, 10]는 매출액의 종류가 20, 12, 10으로 3이다. 두 번째 구간은 [12, 20, 10, 23]는 매출액의 종류가 4이다. 세 번째 구간은 [20, 10, 23, 17]는 매출액의 종류가 4이다. 네 번째 구간은 [10, 23, 17, 10]는 매출액의 종류가 3이다. N일간의 매출기록과 연속구간의 길이 K가 주어지면 첫 번째 구간부터 각 구간별 매출액의 종류를 출력하는 프로그램을 작성하세요. 입력 첫 줄에 N(5<=N<=100,000)과 K(2<=K<=N)가 주어집니다. 두 번째 줄에 N개의 숫자열이 주어집니다. 각 숫자는 500이하의 음이 아닌 정수입니다. 출력 첫 줄에 각 구간의 매출액 종류를 순서대로 출력합니다. 예시 입력 1 7 4 20 12 20 10 23 17 10 예시 출력 1 3 4 4 3Answer
public class Question3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } for (String x : solution(n, k, arr)) { System.out.print(x + " "); } } public static List<String> solution (int n, int k, int[] arr) { List<String> answer = new ArrayList<>(); // 필요한 배열 갯수 : n-k+1개 for (int i = 0; i < n - k + 1; i++) { HashSet<Integer> tmpSet = new HashSet<>(); for (int j = i; j < k+i; j++) { tmpSet.add(arr[j]); } answer.add(String.valueOf(tmpSet.size())); } return answer; } }SOLUTION
public class Answer3 { public static void main(String[] args) { Answer3 T = new Answer3(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } for (int x : T.solution(n, k, arr)) { System.out.print(x + " "); } } public ArrayList<Integer> solution(int n, int k, int[] arr) { ArrayList<Integer> answer = new ArrayList<>(); HashMap<Integer, Integer> HM = new HashMap<>(); for (int i = 0; i < k-1; i++) { HM.put(arr[i], HM.getOrDefault(arr[i], 0)+1); } // 슬라이딩윈도우 알고리즘 int lt = 0; for (int rt = k-1; rt < n; rt++) { HM.put(arr[rt], HM.getOrDefault(arr[rt], 0) + 1); answer.add(HM.size()); HM.put(arr[lt], HM.get(arr[lt]) - 1); if (HM.get(arr[lt]) == 0) { HM.remove(arr[lt]); } lt++; } return answer; } }- 정답은 맞았지만, 슬라이딩윈도우 알고리즘을 까먹어서 시간 초과, 다시 앞부분 복습하기
728x90'알고리즘' 카테고리의 다른 글
section3.2 (0) 2025.08.09 section3.1 (2) 2025.08.09 section4.2 (0) 2025.08.07 section4.1 (2) 2025.08.07 section4.5 (0) 2025.08.06