
#addOddValues
<Character, Integer> 타입을 요소로 가지는 HashMap을 입력받아 짝수 값(Value) 끼리 모두 더한 값을 리턴해야 합니다.
- 입력
인자 1 : hashMap
<Character, Integer> 타입을 요소로 가지는 HashMap - 출력
int 타입의 짝수 Value들의 총합을 리턴해야 합니다.
import java.util.*;
public class Solution {
public int addOddValues(HashMap<Character, Integer> hashMap) {
//TODO..
int sum = 0;
for(Character key : hashMap.keySet()) {
Integer even = hashMap.get(key);
//Map에 값을 전체 출력하기 위해서는 entrySet(), keySet() 메소드를 사용
//entrySet() 메서드는 key와 value의 값이 모두 필요한 경우 사용하고,
//keySet() 메서드는 key의 값만 필요한 경우 사용
//여기서는 key를 Char 형태로 받고 value를 integer 형태로 받았으니까 for문 안에서 keySet 메소드를 사용한다.
if (even % 2 == 0) {
sum = sum + even;
}
}
= 는 수학연산자 ~와 같다로 해석하기 보다는
element를 담는다 혹은 ~으로 본다로 해석하는게 좋을 것 같다.
return sum;
}
}
#select
String 타입을 요소로 가지는 배열과 <String, Integer> 타입을 요소로 가지는 HashMap을 입력받아, 배열의 각 요소들을 HashMap의 키로 했을 때 그 값을 추출하여 만든 새로운 HashMap을 리턴해야 합니다.
- 입력
인자 1 : arr
String 타입을 요소로 가지는 배열
인자 2 : hashMap
<String, Integer> 타입을 요소로 가지는 HashMap - 출력
새로운 HashMap을 리턴해야 합니다. - 주의 사항
입력받은 HashMap에 존재하지 않는 키는 무시합니다.
입력받은 HashMap을 수정하지 않아야 합니다.헷갈렸던 점
map.put() 메소드에서 key 값을 i 로 주고 value 값을 hashMap.get(i) 로 설정했는데
map.get() 메소드의 출력값이 value 값이라는 점! - import java.util.*; public class Solution { public HashMap<String, Integer> select(String[] arr, HashMap<String, Integer> hashMap) { // 새로운 HashMap 만들기 HashMap<String, Integer> map = new HashMap<>(); // 순회하면서 배열의 요소들을 하나씩 HashMap에 담기 for(String i : arr){ if(hashMap.containsKey(i)){ map.put(i, hashMap.get(i)); } } return map; } }
#countAllCharacters
문자열을 입력받아 문자열을 구성하는 각 문자(letter)를 키로 갖는 HashMap을 리턴해야 합니다.
각 키의 값은 해당 문자가 문자열에서 등장하는 횟수를 의미하는 int 타입의 값이어야 합니다.
- 입력
인자 1 : str
String 타입의 공백이 없는 문자열 - 출력
<Character, Integer> 타입을 요소로 갖는 HashMap을 리턴해야 합니다. - 주의 사항
빈 문자열을 입력받은 경우, null을 리턴해야 합니다.char element = str.charAt(i)
여기서 쓰였던 str.charAt(i)는 문자열 뽑기라고 보면 쉽다.
만약 banana라는 문자열이 있다고 하면 - String str = "banana"; char element1 = str.charAt(0); // 첫번째 문자 char element2 = str.charAt(3); // 네번째 문자 System.out.println(element1); System.out.println(element2);
- import java.util.*; public class Solution { public HashMap<Character, Integer> countAllCharacter(String str) { HashMap<Character, Integer> map = new HashMap<>(); if(str.isEmpty()){ return null; } int sum = 0; for(int i = 0 ; i <str.length(); i++){ char element = str.charAt(i); if(map.containsKey(element)){ sum = map.get(element); map.put(element, sum + 1); } else { map.put(element, 1); } } return map; } }
// result
b
a
그래서 banana를 b-a-n-a-n-a를 순회하며 b를 0번째로 만나면
{b = 1}
다음으로 a 를 만나면 a도 처음이니까
{a = 1}
다음으로 n 도 처음이니까
{n = 1}
다음으로 a는 두번째!
if(map.containsKey(element)){
sum = map.get(element);
map.put(element, sum + 1);
}
여기 if 문에 넣어져서 {a = 1 + 1} -> {a = 2}가 된다.
'알고리즘 > [알고리즘] 코플릿' 카테고리의 다른 글
| 변수 타입 문자열 (1) | 2022.09.23 |
|---|---|
| 조건문 (1) | 2022.09.23 |
| 반복문 (0) | 2022.09.23 |
| 재귀 (0) | 2022.09.23 |
| 자료구조 Stack Queue Graph Tree DFS/BFS (1) | 2022.09.23 |