Scanner scanner = new Scanner(System.in);
int N = Integer.parseInt(scanner.nextLine());
String [] arr = scanner.nextLine().split("");
HashMap<String, Integer> hm = new HashMap<>();
for(String s : arr){
hm.put(s,hm.getOrDefault(s,0)+1);
}
// ✔ 방법1.
String answer="";
int max = Integer.MIN_VALUE;
for(String key : hm.keySet()){
if(hm.get(key) > max){
max = hm.get(key);
answer=key;
}
}
System.out.println(answer);
// ✔ 방법2.
// Collections.sort()를 사용하기 위해 List 형태로 Map을 가져와야함.
List<Map.Entry<String,Integer>> entryList = new LinkedList<>(hm.entrySet());
// 정렬 내장 함수 사용
entryList.sort(Map.Entry.comparingByValue());
for(Map.Entry<String, Integer> entry : entryList){
//System.out.println("key: "+entry.getKey()+" value: "+entry.getValue());
}
HashMap 사용하여 알파벳과 개수를 짝지었다.
갯수는 map.getOrDefault함수를 사용하여, 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환한다. 따라서 내 코드에서는 찾는키가 없다면 0을 있다면 value를 반환하고 거기에 +1을 해줌으로써 개수를 세주는거다.
굳이 정렬함수를 쓰지 않아도, max라는 변수를 이용하여 제일 큰 값을 찾아낼 수 있다.
정렬함수를 쓰기 위해서는 hashmap을 list형태로 변환해주어야한다.
참고
Scanner scanner = new Scanner(System.in);
HashMap<String,Integer> map1 = new HashMap<>();
HashMap<String,Integer> map2 = new HashMap<>();
String[] arr1 = scanner.nextLine().split("");
String[] arr2 = scanner.nextLine().split("");
for(String s : arr1){
map1.put(s,map1.getOrDefault(s,0)+1);
}
String answer = "YES";
// arr1과 비교하기
for(String s : arr2){
if(!map1.containsKey(s) || map1.get(s) == 0) { // 키가 없거나, value값이 다르다면
answer="NO";
break;
}else{
map1.put(s, map1.get(s)-1); // 키가 같은거에서는 1빼줌 (개수 세야되니까)
}
}
System.out.println(answer);
HashMap 사용하여 알파벳과 개수를 짝지었다.
갯수는 map.getOrDefault함수를 사용하여, 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환한다. 따라서 내 코드에서는 찾는키가 없다면 0을 있다면 value를 반환하고 거기에 +1을 해줌으로써 개수를 세주는거다.
그리고 다음 배열에서 있는 건 -1로 해서 개수를 맞춰본다.
Scanner scanner = new Scanner(System.in);
int N = Integer.parseInt(scanner.next());
int K = Integer.parseInt(scanner.next());
int [] arr = new int[N];
for(int i=0; i<arr.length; i++){
arr[i] = Integer.parseInt(scanner.next());
}
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0; i<K; i++){
map.put(arr[i],map.getOrDefault(arr[i],0)+1);
}
int size = map.size();
System.out.print(size+" ");
for(int i=0; i<N-K; i++){
map.put(arr[i],map.getOrDefault(arr[i],0)-1);
map.put(arr[i+K],map.getOrDefault(arr[i+K],0)+1);
if(map.get(arr[i])==0){
map.remove(arr[i]);
}
System.out.print(map.size()+" ");
}
HashMap 사용하여 매출액과 개수를 짝지었다.
갯수는 map.getOrDefault함수를 사용하였고, two Pointers 방식으로 따져보았다.
hashmap + two pointers
Scanner scanner = new Scanner(System.in);
int N = Integer.parseInt(scanner.next());
int K = Integer.parseInt(scanner .next());
int [] nums = new int[N];
for(int i=0; i<N; i++){
nums[i] = Integer.parseInt(scanner.next());
}
// 중복 피함
TreeSet<Integer> tset = new TreeSet<>(Collections.reverseOrder());
//3장을 뽑는 것이므로 3중 for문
for(int i=0; i<N; i++){
for (int j=i+1; j<N; j++){
for(int l=j+1; l<N; l++){
tset.add(nums[i]+nums[j]+nums[l]);
}
}
}
int cnt=0;
for(int x : tset){
cnt++;
if(cnt == K){
System.out.println(x);
}
3중for문을 이용하여 숫자3개를 뽑았고 그 합을 TreeSet에 넣었다.
3개를 어떻게 뽑지라고 고민했는데 그냥 3중for문을 쓰면 되는거였다.
합이 같은것이 여러개 나올 수 있는데, 중복을 제거하는 TreeSet에 넣으면 해결되었다.
treeset
Set 인터페이스를 구현한 클래스로써 객체를 중복해서 저장할 수 없고 저장 순서가 유지되지 않는다는 Set의 성질
TreeSet<Integer> set1 = new TreeSet<Integer>();//TreeSet생성
TreeSet<Integer> set2 = new TreeSet<>();//new에서 타입 파라미터 생략가능
TreeSet<Integer> set3 = new TreeSet<Integer>(set1);//set1의 모든 값을 가진 TreeSet생성
TreeSet<Integer> set4 = new TreeSet<Integer>(Arrays.asList(1,2,3));//초기값 지정
TreeSet<Integer> tset = new TreeSet<>(Collections.reverseOrder());