본문 바로가기

알고리즘/[알고리즘] 코플릿

Collection

#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