안녕하세요. pitang입니다.
오늘은 컬렉션 프레임 워크 List 컬렉션에 대한 퀴즈를 풀어보겠습니당
퀴즈를 풀기 전에 메서드를 검증하는 방법을 먼저 알아보겠습니다.
Junit Test Case
검증하고 싶은 메서드 클래스에서 맥북에서는 command + n 을 누르고 (윈도우는 ctrl + n)
Next -> finish를 누르면 생성된다.
이 Test 클래스에서 메서드가 잘 작성이 되었는지 오류가 없는지 검사할 수 있다.
오늘 이 Junit을 이용해 Quiz3번부터! 검증하며 퀴즈를 풀어보겠다.
Quiz1번과 2번은 반복문과 List컬렉션을 이용한 문제이다.
Quiz 1번
스캐너로 문자열을 입력받고 입력받은 값을 배열에 저장한다.
l 을 입력하면 지금까지 입력받았던 문자열을 배열로 보여주고
e 를 입력하면 프로그램 종료를, r 을 입력하면 가장 마지막 배열을 삭제한다.
⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️
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 을 입력하면 통계(합, 평균, 최댓값, 최솟값)를 보여준다.
⬇️⬇️⬇️ 정답은 더보기를 눌러주세요 ⬇️⬇️⬇️
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 맥북을 사용 중입니다.*
'6개월 대장정 > JAVA 퀴즈' 카테고리의 다른 글
28일차 - 컬렉션 프레임 워크 - Map컬렉션 Quiz(2) (0) | 2021.09.27 |
---|---|
27일차 - 컬렉션 프레임 워크 - Map컬렉션 Quiz(1) (0) | 2021.09.23 |
26일차 - 컬렉션 프레임 워크-Set컬렉션 Quiz (0) | 2021.09.20 |