본문 바로가기

6개월 대장정/JAVA 퀴즈

27일차 - 컬렉션 프레임 워크 - Map컬렉션 Quiz(1)

반응형

안녕하세요. pitang입니다.

Map 컬렉션에 대한 퀴즈를 살펴보겠습니다.

Junit으로 메서드를 검증하여 오류가 없으면 정답인 퀴즈들입니다!

 

Quiz 1번

1:2, 2:4 두 개의 엔트리를 리턴하는 메서드를 작성하세요.

아래의 junit으로 오류를 확인하세요.

class Ex01Test {

	@Test
	void test() {
		
		Ex01 e = new Ex01();
		
		Map<Integer, Integer> map = new HashMap<>();
		e.put(map);
		
		assertEquals(2, map.get(1));
		assertEquals(4, map.get(2));
		assertEquals(2, map.size());
		assertFalse(map.containsKey(3));
		
	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex01 { 

	public void put(Map<Integer, Integer> map) {
    
    	//1:2, 2:4 두개의 엔트리를 넣어주면 됨.
        map.put(1, 2);
        map.put(2, 4);
    
    }

}

 

Quiz 2번

1:2, 2:4 두 개의 엔터리를 가지고 있는 map을 리턴하는 메서드를 작성하세요.

아래의 junit으로 오류를 확인하세요.

class Ex02Test {

	@Test
	void test() {
		
		Ex02 e = new Ex02();
		
		Map<Integer, Integer> map = e.put();
		
		assertEquals(2, map.size());
		assertEquals(2, map.get(1));
		assertEquals(4, map.get(2));
		assertFalse(map.containsKey(3));
		
	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex02 {

	public Map<Integer, Integer> put() {
    
    	//map을 만들어서 리턴
        //1:2, 2:4를 추가
        Map<Integer, Integer> map = new HashMap<>();
        map.put(1,2);
        map.put(2,4);
        
        return map;
    
    }

}

 

Quiz 3번

key : value 는 총 다섯개 이고 key는 1 ~ 5 까지, value 는 key * 3 의 값을 가지고 있는 map을 리턴하는 메서드를 작성하세요.

아래의 junit으로 오류를 확인하세요.

class Ex03Test {

	@Test
	void test() {
		
		Ex03 e = new Ex03();
		
		Map<Integer,Integer> map = e.triple();
		
		assertEquals(5, map.size());
		assertEquals(3, map.get(1));
		assertEquals(6, map.get(2));
		assertEquals(9, map.get(3));
		assertEquals(12, map.get(4));
		assertEquals(15, map.get(5));
		
	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex03 {

	public Map<Integer, Integer> triple() {
    
    	//map을 만들어서 return
        // key:value 총 5개
		// key - 1~5까지
		// value - key * 3
        Map<Integer, Integer> map = new HashMap<>();
        
        for(int i = 1; i <= 5 ; i++) {
        	map.put(i, i*3);
        }
    
    	return map;
    
    }

}

 

Quiz 4번

list에 있는 String을 key, key의 문자열의 길이를 value로 가지고 있는 map을 리턴하는 메서드를 작성하세요.

아래의 junit으로 오류를 확인하세요.

class Ex04Test {

	@Test
	void test() {

		Ex04 e = new Ex04();
		
		Map<String, Integer> m = e.length(Arrays.asList(new String[] {"java","spring","apple","jeju", "bts"}));
		assertEquals(5, m.size());
		assertEquals(4, m.get("java"));
		assertEquals(6, m.get("spring"));
		assertEquals(5, m.get("apple"));
		assertEquals(4, m.get("jeju"));
		assertEquals(3, m.get("bts"));

	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex04 {

	public Map<String, Integer> length(List<String> strs) {
    
    	// list에 있는 String을 key, 문자열(key)의 길이를 value
		// map을 만들어서 return 
        Map<String, Integer> map = new HashMap<>();
        
        for(String str : strs) {
        	map.put(str, str.length());
        }
    
    	return map;
    
    }

}

 

Quiz 5번

param이 가지고 있는 value를 2배한 새로운 map을 리턴하는 메서드를 작성하세요. 단, param이 변경되면 안됩니다.

아래의 junit으로 오류를 확인하세요.

class Ex05Test {

	@Test
	void test() {
		Map<Integer, Integer> map1 = new HashMap<>();
		map1.put(1, 3);
		map1.put(2,	10);
		map1.put(100, 2);
		
		Ex05 e = new Ex05();
		Map<Integer, Integer> map2 = e.doubling(map1);
		
		assertEquals(3, map2.size());
		assertEquals(6, map2.get(1));
		assertEquals(20, map2.get(2));
		assertEquals(4, map2.get(100));
		
		assertEquals(3, map1.get(1));
		assertEquals(10, map1.get(2));
		assertEquals(2, map1.get(100));
		
		Map<Integer, Integer> map3 = e.doubling2(map1);
		
		assertEquals(3, map3.size());
		assertEquals(6, map3.get(1));
		assertEquals(20, map3.get(2));
		assertEquals(4, map3.get(100));
		
		assertEquals(3, map1.get(1));
		assertEquals(10, map1.get(2));
		assertEquals(2, map1.get(100));
		
	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex05 {

	public Map<Integer, Integer> doublint(Map<Integer, Integer> param) {
    
    	//param이 가지고 있는 value를 2배한 새 맵을 만들어서 return
		//단, param이 변경되면 안됨.
        Map<Integer, Integer> map = new HashMap<>();
        
        //keySet으로 탐색
        Set<Integer> keys = param.keySet();
        
        for(Integer key : keys) {
        	Integer value = param.keySet();
            map.put(key, value*2);
        }
        
    	return map;
        
    }
    
    public Map<Integer, Integer> doubling2(Map<Integer, Integer> param) {
    
    	Map<Integer, Integer> map = new HashMap<>();
        
        //entrySet 으로 탐색
        Set<Map.Entry<Integer,Integer>> entries = param.entrySet();
        
        for(Map.Entry<Integer,Integer> entry : entries) {
    		Integer key = entry.getKey();
            Integer value = entry.getValue();
            map.put(key,value*2);
    	}
    
    	return map;
    
    }

}

 

Quiz 6번

파라미터 map의 각 값의 2배를 저장하여 리턴하는 메서드를 작성하세요.

아래의 junit으로 오류를 확인하세요.

class Ex06Test {

	@Test
	void test() {
		
		Ex06 e = new Ex06();
		
		Map<Integer,Integer> map = new HashMap<>();
		map.put(1, 300);
		map.put(200, 6);
		map.put(-1, 7);
		
		e.doubling(map);
		assertEquals(3, map.size());
		assertEquals(600, map.get(1));
		assertEquals(12, map.get(200));
		assertEquals(14, map.get(-1));

	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex06 {

	public void doubling(Map<Integer, Integer> map) {
    
    	//파라미터 map의 각 값을 2배로 저장해 리턴
        Set<Integer> keys = map.keySet();
        
        for(Integer key : keys) {
        	Integer value = map.get(key);
            map.put(key, value*2);
        }
    
    }
    
}

 

Quiz 7번

param의 size는 2, key는 "a", "b" 이다.

두 value를 서로 바꾼(swap) map을 만들어서 리턴하는 메서드를 작성하세요. 단, param이 변경되면 안됩니다.

아래의 junit으로 오류를 확인하세요.

class Ex07Test {

	@Test
	void test() {
			
		Ex07 e = new Ex07();
		
		Map<String, String> map1 = new HashMap<>();
		map1.put("a", "apple");
		map1.put("b", "banana");
		
		Map<String, String> map2 = e.swap(map1);
		
		assertEquals(2, map2.size());
		assertEquals("apple", map2.get("b"));
		assertEquals("banana", map2.get("a"));
		
		assertEquals(2, map1.size());
		assertEquals("apple", map1.get("a"));
		assertEquals("banana", map1.get("b"));
		
	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex07 {

	public Map<String, String> swap(Map<String, String> param) {
    
    	//param의 size가 2
		//param의 키는 "a","b" 이다.
		//두 value를 서로 바꾼(swap) map을 만들어서 return
		//param은 변경 x
        Map<String, String> map = new HashMap<String,String>();
        map.put("b", param.get("a"));
        map.put("a", param.get("b"));
        
        return map;
    	
    }

}

 

Quiz 8번

param의 size는 2, key는 "a", "b" 이다. 두 value를 서로 바꾼값을 저장해 리턴하는 메서드를 작성하세요. 

아래의 junit으로 오류를 확인하세요.

class Ex08Test {

	@Test
	void test() {
		Ex08 e = new Ex08();
		
		Map<String,String> map = new HashMap<>();
		map.put("a", "apple");
		map.put("b", "banana");
		
		e.swap(map);
		assertEquals(2, map.size());
		assertEquals("banana", map.get("a"));
		assertEquals("apple", map.get("b"));
		
	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex08 {

	public void swap(Map<String, String> param) {
    
    	//param size : 2
		//param 키는 "a", "b"
		//param 각 값을 변경
    	String bValue = param.get("b");
        param.put("b", param.get("a");
        param.put("a", bValue);
    
    }

}

 

Quiz 9번

str의 문자가 몇 번 나오는지 세어서 문자를 key, 갯수(몇 번)를 value로 갖는 map을 리턴하는 메서드를 작성하세요.

아래의 junit으로 오류를 확인하세요.

class Ex09Test {

	@Test
	void test() {
		
		Ex09 e = new Ex09();
		
		String s = "keysvalues";
		
		Map<Character, Integer> map = e.countCharacter(s);
		
		assertEquals(8, map.size());
		assertEquals(2, map.get('e'));
		assertEquals(2, map.get('s'));
		assertEquals(1, map.get('k'));
		assertEquals(null, map.get('z'));
		
	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex09 {

	public Map<Character, Integer> countCharacter(String str) {
    
    	for(int i = 0; i < str.length(); i++) {
        	Character c = str.charAt(i);
            
            if(map.containsKey(c)) {
            	Integer v = map.get(c);
                map.put(c, v+1);
            } else {
            	map.put(c,1);
            }
            
        }
    
    	return map;
    
    }

}

 

Quiz 10번

map1과 map2에 key가 둘 다 있으면 value를 서로 더해 저장, 한쪽에만 있으면 그냥 저장하는 map을 리턴하는 메서드를 작성하세요.

아래의 junit으로 오류를 확인하세요.

class Ex10Test {

	@Test
	void test() {
		Ex10 e = new Ex10();
		
		Map<String, Integer> m1 = new HashMap<>();
		Map<String, Integer> m2 = new HashMap<>();
		
		m1.put("kim", 3);
		m1.put("bob", 7);
		m1.put("son", 10);
		
		m2.put("bob", 77);
		m2.put("son", 99);
		m2.put("ji", 13);
		
		Map<String, Integer> res = e.sum(m1, m2);
		
		assertEquals(4, res.size());
		assertEquals(3, res.get("kim"));
		assertEquals(84, res.get("bob"));
		assertEquals(109, res.get("son"));
		assertEquals(13, res.get("ji"));
	}

}

 

⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️

 

더보기
public class Ex10 {

	public Map<String, Integer> sum(Map<String, Integer> map1, Map<String, Integer> map2) {
    
    	//map1과 map2에 키가 둘 다 있으면 밸류를 더해서 추가
		//한쪽에만 있으면 그냥 추가
		//새 map을 만들어서 리턴
        Map<String, Integer> result = new HashMap<>();
       
       	//map1의 entry들을 result에 옮김.
       	Set<String> keys1 = map1.keySet();
        
        for(String key : keys1) {
        	result.put(key, map1.get(key));
        }
        
        //map2의 entry들을 옮기면서 중복 확인.
        Set<String> keys2 = map2.keySet();
        
        for(String key : keys2) {
        	
            if(result.contaisKey(key)) {
            	Integer v = result.get(key);
                result.put(key, v+map2.get(key));
            } else {
            	result.put(key, map2.get(key));
            }
        
        }
        
        return result;
    
    }

}

 

감사합니다.

 

*m1 맥북을 사용 중입니다.*

 

 

 

728x90
반응형