25일차 - 컬렉션 프레임 워크-List컬렉션 Quiz
안녕하세요. 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 맥북을 사용 중입니다.*