[HashMap] 매출액의 종류

김우진·2022년 7월 26일
0

알고리즘 문제

목록 보기
9/21
post-thumbnail

매출액의 종류

문제 정보

  • 사이트 : Infrean 자바 알고리즘 문제 풀이 강의
  • 문제 번호 : 4강 3번
  • 문제 분류 : HashMap

문제 풀이

내가 짠 코드

  • slicing window를 이용하여 해결하였다.
public class Main {
	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        String[] input = br.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int k = Integer.parseInt(input[1]);
        int[] sales = new int[n];
        input = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            sales[i] = Integer.parseInt(input[i]);
        }
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < k; i++) {
            map.put(sales[i], map.getOrDefault(sales[i], 0) + 1);
        }
        sb.append(map.size()).append(" ");
        for (int i = k; i < n; i++) {
            map.put(sales[i - k], map.get(sales[i - k]) - 1);
            if (map.get(sales[i - k]) == 0)
                map.remove(sales[i - k]);
            map.put(sales[i], map.getOrDefault(sales[i], 0) + 1);
            sb.append(map.size()).append(" ");
        }
        bw.write(sb.toString());
        bw.flush();
        bw.close();
        br.close();
    }
}

정답 코드

  • two pointer(index 이용) 방식을 사용했다.
public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        String[] input = br.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int k = Integer.parseInt(input[1]);
        int[] sales = new int[n];
        input = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            sales[i] = Integer.parseInt(input[i]);
        }
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < k-1; i++) {
            map.put(sales[i], map.getOrDefault(sales[i],0) + 1);
        }
        int lt = 0;
        for (int rt = k-1; rt < n; rt++) {
            map.put(sales[rt], map.getOrDefault(sales[rt], 0) + 1);
            sb.append(map.size()).append(" ");
            map.put(sales[lt], map.get(sales[lt]) - 1);
            if(map.get(sales[lt]) == 0)
                map.remove(sales[lt]);
            lt++;
        }
        bw.write(sb.toString());
        bw.flush();
        bw.close();
        br.close();
    }
}

문제 출처

썸네일 출처

Image by storyset on Freepik

0개의 댓글