6개월 대장정/JAVA 퀴즈

25일차 - 컬렉션 프레임 워크-List컬렉션 Quiz

pitang 2021. 9. 17. 06:18
반응형

안녕하세요. pitang입니다.

오늘은 컬렉션 프레임 워크 List 컬렉션에 대한 퀴즈를 풀어보겠습니당

 

퀴즈를 풀기 전에 메서드를 검증하는 방법을 먼저 알아보겠습니다.

Junit Test Case

검증하고 싶은 메서드 클래스에서 맥북에서는 command + n 을 누르고 (윈도우는 ctrl + n) 

Junit Test Case

Next -> finish를 누르면 생성된다.

이 Test 클래스에서 메서드가 잘 작성이 되었는지 오류가 없는지 검사할 수 있다.

오늘 이 Junit을 이용해 Quiz3번부터! 검증하며 퀴즈를 풀어보겠다.

Quiz1번과 2번은 반복문과 List컬렉션을 이용한 문제이다.

 

Quiz 1번

스캐너로 문자열을 입력받고 입력받은 값을 배열에 저장한다.

l 을 입력하면 지금까지 입력받았던 문자열을 배열로 보여주고 

e 를 입력하면 프로그램 종료를, r 을 입력하면 가장 마지막 배열을 삭제한다.

console

 

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

 

 

더보기
public class Ex01 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		List<String> list = new ArrayList<>();
		boolean run = true;
		
		while(run) {
			
			System.out.print("l:list, e:exit, r:remove 입력> ");
			String str = scan.next();
			
			switch (str) {
			case "l":
				for(String s : list) {
					System.out.println(s);
				}
				break;
				
			case "e":
				run = false;
				break;

			case "r":
				//마지막 입력한 item이 삭제
				if(!list.isEmpty()) {	
					list.remove(list.size()-1);
				}
				break;
				
			default:
				list.add(str);
				break;
			}
				
		}	
		scan.close();
	}
	
}

 

Quiz 2번

스캐너로 정수형을 입력받고 입력받은 값을 배열에 저장한다.

0 을 입력하면 프로그램 종료를, 1 을 입력하면 지금까지 입력받은 정수형을 배열로 보여주고

2 를 입력하면 가장 마지막 배열을 삭제하고, 3 을 입력하면 통계(합, 평균, 최댓값, 최솟값)를 보여준다.

console

 

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

 

더보기
public class Ex02 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		List<Integer> list = new ArrayList<>();
		boolean run = true;	
		
		while(run) {
			
			System.out.print("0:종료, 1:출력, 2:삭제, 3:통계 점수(50이상) > ");
			Integer a = scan.nextInt();
			
			switch (a) {
			case 0:
				run = false;
				break;
				
			case 1:
				System.out.println(list);
				break;
				
			case 2:
				if(list.size() > 0) {
					list.remove(list.size()-1);
				}
				break;
				
			case 3:
				//합
                int sum = 0;
				for(int i = 0; i < list.size(); i++) {
					sum += list.get(i);
				}
				System.out.println("합 : " + sum);
				
                //평균
				double avg = sum / (double)list.size();
				System.out.println("평균 : " + avg);
				
                //최대값
				int max = list.get(0);
				for(int i = 0; i < list.size(); i++) {
					if(max < list.get(i)) {
						max = list.get(i);
					}
				}
				System.out.println("최대값 : " + max);
				
                //최소값
				int min = list.get(0);
				for(int i = 0; i < list.size(); i++) {
					if(min > list.get(i)) {
						min = list.get(i);
					}
				}
				System.out.println("최소값 : " + min);
				
				break;

			default:
				if(a >= 50) {
					list.add(a);
				}
				break;
			}
			
		}
		
		
	}
	
}

 

Quiz 3번

str이 "3 4" 라면 return 값은 7이 나오게끔 " " 를 구분 인자로 값을 더하는 메서드를 작성하세요.

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

class Ex05Test {

	@Test
	void test() {
		
		Ex05 e = new Ex05();
		
		assertEquals(7, e.sum("3 4"));
		assertEquals(43, e.sum("10 33"));
		assertEquals(0, e.sum("-5 5"));
		
	}

}

 

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

 

더보기
public class Ex05 {

	public int sum(String str) {
		
		// str : "3 4"
		// return : 7
		
		String[] arr1 = str.split(" ");
		
		int a = Integer.parseInt(arr1[0]);
		int b = Integer.parseInt(arr1[1]);
		
		return a+b;
		
	}
	
}

- Integer.parseInt(String) -> 숫자형의 문자열을 인자 값으로 받으면 해당 값을 10진의 Integer형으로 반환.
- Integer.parseInt(String, int) -> 숫자형의 문자열을 int형 진수 값의 맞추어 Integer형으로 반환.

 

Quiz 4번

list의 아이템 중 최댓값을 리턴하는 메서드를 작성하세요.

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

class Ex06Test {

	@Test
	void test() {
		Ex06 e = new Ex06();
		
		ArrayList<Integer> list1 = new ArrayList<>();
		list1.add(33);
		list1.add(3);
		list1.add(100);
		list1.add(-80);
		
		assertEquals(100, e.max(list1));
		assertEquals(100, e.max(Arrays.asList(33, 3, 100, -80)));
		assertEquals(10, e.max(Arrays.asList(7, 8, 9, 10)));
		//Arrays.asList() -> 배열을 만드는 함수.
		
		assertEquals(-1, e.max(Arrays.asList(-10, -8, -6, -1, -5)));
		
	}

}

 

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

 

더보기
public class Ex06 {

	public int max(List<Integer> list) {
		//list의 아이템 중 최대값 리턴
		
		int max = list.get(0);
		
		for(int item : list) {
			max = (max < item) ? item : max;
		}
		
		return max;
	}
	
}

 

Quiz 5번 

list의 최댓값이 있는 인덱스를 리턴하는 메서드를 작성하세요.

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

class Ex07Test {

	@Test
	void test() {
		
		Ex07 e = new Ex07();
		
		assertEquals(2, e.maxIndex(Arrays.asList(33, 3, 100, -80)));
		assertEquals(3, e.maxIndex(Arrays.asList(7, 8, 9, 10)));
		assertEquals(3, e.maxIndex(Arrays.asList(-10, -8, -6, -1, -5)));
		assertEquals(0, e.maxIndex(Arrays.asList(100,50,40,100,0)));
		
	}

}

 

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

 

더보기
public class Ex07 {

	public int maxIndex(List<Integer> list) {
		
		//최대값이 있는 인덱스를 리턴
		
		int index = 0;
		int max = list.get(0);
		
		for(int i = 1; i < list.size(); i++) {
			if(list.get(i) > max) {
				max = list.get(i);
				index = i;
			}
		}
		
		return index;
		
	}
	
}

 

Quiz 6번

list의 최대값이 있는 마지막 인덱스를 리턴하는 메서드를 작성하세요.

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

class Ex08Test {

	@Test
	void test() {
		Ex08 e = new Ex08();
		
		assertEquals(3, e.maxLastIndex(Arrays.asList(8, 9, 10, 10, 9, 8)));
		assertEquals(5, e.maxLastIndex(Arrays.asList(-1, -2, -3, -100, -200, -1)));
		assertEquals(3, e.maxLastIndex(Arrays.asList(10, 9, 8, 100, 1, 2, 3)));
		
	}

}

 

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

 

더보기
public class Ex08 {

	public int maxLastIndex(List<Integer> list) {
		
		//list의 최대값이 있는 마지막 인덱스
		
		int max = list.get(list.size()-1);
		int index = list.size()-1;
		
		for(int i = index; i >= 0; i--) {
			if( max < list.get(i)) {
				max = list.get(i);
				index = i;
			}
		}
		
		//선생님풀이
//		int max = list.get(0);
//		int index = 0;
//		
//		for(int i = 1; i < list.size(); i++) {
//			if(list.get(i) >= max) {
//				max = list.get(i);
//				index = i;
//			}
//		}
//		
//		return index;
		
		return index;
	}
	
}

 

Quiz 7번

list의 최댓값이 있는 마지막 인덱스를 삭제하고 리턴하는 메서드를 작성하세요.

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

class Ex09Test {

	@Test
	void test() {
		Ex09 e = new Ex09();
				
		List<Integer> list1 = new ArrayList<>(Arrays.asList(8, 9, 10, 10, 9, 8));
		e.removeLastMax(list1);
		assertEquals(5, list1.size());
		assertEquals(9, list1.get(3));
		
		List<Integer> list2 = new ArrayList<>(Arrays.asList(-1, -2, -3, -100, -200, -1));
		e.removeLastMax(list2);
		assertEquals(5, list2.size());
		assertEquals(-200, list2.get(4));
		
		List<Integer> list3 = new ArrayList<>(Arrays.asList(10, 9, 8, 100, 1, 2, 3));
		e.removeLastMax(list3);
		assertEquals(6, list3.size());
		assertEquals(1, list3.get(3));
		
	}

}

aslist()를 이용하면 list의 size()를 수정할 수 없어서 list를 다 만들어줬다.

 

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

 

더보기
public class Ex09 {

	public void removeLastMax(List<Integer> list) {
		
		//list의 마지막 가장 큰 값을 삭제
		
		int max = list.get(list.size()-1);
		int index = list.size()-1;
		
		for(int i = index; i >= 0; i--) {
			if(max < list.get(i)) {
				max = list.get(i);
				index = i;
			}
		}
		
		list.remove(index);
		
	}
	
}

 

Quiz 8번

list의 짝수 아이템들만 모은 새 ArrayList를 만들어서 리턴하는 메서드를 작성하세요.

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

class Ex10Test {

	@Test
	void test() {
		
		Ex10 e = new Ex10();
		
		List<Integer> list1 = new ArrayList<>(Arrays.asList(8, 9, 10, 10, 9, 8));
		ArrayList<Integer> r1 = e.evenList(list1);
		assertEquals(4, r1.size());
		assertEquals(6, list1.size());
		
		List<Integer> list2 = new ArrayList<>(Arrays.asList(-1, -2, -3, -100, -200, -1));
		ArrayList<Integer> r2 = e.evenList(list2);
		assertEquals(3, r2.size());
		assertEquals(6, list2.size());
		
		List<Integer> list3 = new ArrayList<>(Arrays.asList(10, 9, 8, 100, 1, 2, 3));
		ArrayList<Integer> r3 = e.evenList(list3);
		assertEquals(4, r3.size());
		assertEquals(7, list3.size());
		
	}

}

 

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

 

더보기
public class Ex10 {

	public ArrayList<Integer> evenList(List<Integer> list) {
		
		//list의 짝수 아이템들만 모은 새 ArrayList를 만들어서 리턴
		ArrayList<Integer> arr1 = new ArrayList<>();
		
		for(int i = 0; i < list.size(); i++	) {
			if(list.get(i) % 2 == 0) {
				arr1.add(list.get(i));
			}
		}
		
		return arr1;
		
	}
	
}

 

Quiz 9번

파라미터로 받은 list의 최솟값, 최댓값을 아이템으로 갖는 새 ArrayList를 만들어서 리턴하는 메서드를 작성하세요.

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

class Ex11Test {

	@Test
	void test() {
		
		Ex11 e = new Ex11();
		
		List<Integer> list1 = new ArrayList<>(Arrays.asList(8, 9, 10, 10, 9, 8));
		ArrayList<Integer> r1 = e.minMax(list1);
		assertEquals(2, r1.size());
		assertEquals(8, r1.get(0));
		assertEquals(10, r1.get(1));
		
		List<Integer> list2 = new ArrayList<>(Arrays.asList(-1, -2, -3, -100, -200, -1));
		ArrayList<Integer> r2 = e.minMax(list2);
		assertEquals(2, r2.size());
		assertEquals(-200, r2.get(0));
		assertEquals(-1, r2.get(1));
		
		List<Integer> list3 = new ArrayList<>(Arrays.asList(10, 9, 8, 100, 1, 2, 3));
		ArrayList<Integer> r3 = e.minMax(list3);
		assertEquals(2, r3.size());
		assertEquals(1, r3.get(0));
		assertEquals(100, r3.get(1));
		
	}

}

 

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

 

더보기
public class Ex11 {

	public ArrayList<Integer> minMax(List<Integer> list) {
		
		//파라미터로 받은 list의 최소값, 최대값을 아이템으로 갖는 ArrayList 리턴
		ArrayList<Integer> arr = new ArrayList<>();
		int min = list.get(0);
		int max = list.get(0);
		
		for(int i = 0; i < list.size(); i++) {
			if(min > list.get(i)) {
				min = list.get(i);
			} 
			if(max < list.get(i)) {
				max = list.get(i);
			}	
		}
		
		arr.add(0,min);
		arr.add(1,max);
		
		return arr;
		
	}
	
}

 

Quiz 10번

배열이 가운데 기준으로 양쪽이 똑같으면 true를 리턴하는 메서드를 작성하세요.

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

class Ex12Test {

	@Test
	void test() {
		
		Ex12 e = new Ex12();
		
		assertEquals(true,e.mirror(Arrays.asList(1, 2, 3, 4, 3, 2, 1)));
		assertEquals(true, e.mirror(Arrays.asList(5, 4, 2, 2, 4, 5)));
		assertEquals(false, e.mirror(Arrays.asList(1, 2, 3, 1, 2, 3)));
		
		assertEquals(true,e.mirror2(Arrays.asList(1, 2, 3, 4, 3, 2, 1)));
		assertEquals(true, e.mirror2(Arrays.asList(5, 4, 2, 2, 4, 5)));
		assertEquals(false, e.mirror2(Arrays.asList(1, 2, 3, 1, 2, 3)));
		
		assertEquals(true, e.mirror2(Arrays.asList("book", "java", "java", "book")));
		assertEquals(false, e.mirror2(Arrays.asList("asd","java","jas")));
		
		assertTrue(e.mirror2(Arrays.asList(1,2,3,2,1)));
		
	}

}

 

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

 

더보기
public class Ex12 {

	//첫번째방법
	public boolean mirror(List<Integer> list) {
		
		int left = 0;
		int right = list.size()-1;
		
		while(right > left) {
			int leftValue = list.get(left);
			int rightValue = list.get(right);
			
			if(leftValue == rightValue) {
				left++;
				right--;
			} else {
				return false;
			}
		}
		
		return true;
	}
	
    //두번째방법
	public <T> boolean mirror2(List<T> list) {
		
		int left = 0;
		int right = list.size()-1;
		
		while(left < right) {
			T leftValue = list.get(left);
			T rightValue = list.get(right);
			
			if(leftValue.equals(rightValue)) {
				left++;
				right--;
			} else {
				return false;
			}
		}
		
		return true;
		
	}
	
}

 

 

감사합니다.

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형