본문 바로가기

6개월 대장정/JAVA 퀴즈

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

반응형

안녕하세요. 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
반응형