본문 바로가기
알고리즘/시험 팁

나무재테크로 알아보는 Map 자료구조

by shinyou1024 2020. 6. 3.

나무 재테크 풀이 보러가기

https://shinyou1024.tistory.com/52

 

백준 16235 나무 재테크

삼성 코딩테스트(역량테스트) 기출 해싱 각 칸마다 Map 자료구조로 나무의 상태를 관리한다 { 나이 : 해당 나이인 나무 수} 형태 TreeMap : 순서가 있는 Map 자료구조 나이순으로 관리하기 위해 HashMap�

shinyou1024.tistory.com

TreeMap

순서가 있는 Map 자료구조 

선언

이중 리스트의 요소가 Map인 구조로 작성했다

  1. 우선 new로 전체 자료구조를 생성한다
  2. 첫 번째 포문을 돌면서 i마다 new ArrayList<Map<>>을 add한다
  3. 두 번째 포문에서 j마다 dict.get(i)에 new TreeMap<>을 add한다
// 각 칸마다 트리맵 사용해 나무를 관리 {나이 : 해당 나이 나무 수}
static List<List<Map<Integer, Integer>>> dict;

// 각 칸마다 트리맵을 넣어준다
// 트리맵 => 어린 순으로 관리하기 위해 (어린 애들부터 양분을 먹기 때문)
dict = new ArrayList<List<Map<Integer, Integer>>>(); // 일단 동적 할당 
    for (int i = 0; i < h; i++) { // 행마다 ArrayList 할당  
        dict.add(new ArrayList<Map<Integer, Integer>>());
    for (int j = 0; j < w; j++) { // 칸마다 트리맵 할당 
        dict.get(i).add(new TreeMap<Integer, Integer>());
    }
}

참조

매번 get.(i).get(j)를 쓰기 귀찮아서

hmap이라는 Map을 통해 dict을 참조했다.

자바에서는 reference type을 대입하면 값에 의한 복사가 아니라 레퍼런스에 의한 복사가 된다

쉽게 말해 hmap에서 값을 변경하면 dict에도 그대로 갱신된다

Map<Integer, Integer> hmap = dict.get(i).get(j);

입력

  • contiansKey()를 통해

    없으면 value를 1로 넣어주고

    있으면 원래 value에 +1한 값을 넣는다

  • Map 자료구조는 중복 허용이 안 되기 때문에 value가 갱신되는 것과 동일해진다

if (hmap.containsKey(age)) {
        hmap.put(age, hmap.get(age) + 1);
} else {
        hmap.put(age, 1);
}

key값 순회

for문과 keySet() 메서드로 모든 키 값을 순회할 수 있다!

for(Integer age:hmap.keySet()) {

'알고리즘 > 시험 팁' 카테고리의 다른 글

Java 시험장 팁  (0) 2020.04.24

댓글