매출액의 종류
문제 정보
- 사이트 : 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