SW공부 37일차

Guryena·2023년 2월 20일
0

CS

목록 보기
30/34

1. ArrayList 와 LinkedList 의 장단점은?

ArrayList는 기본적으로 배열을 사용한다. 하지만 일반 배열과 차이점이 존재한다.
일반 배열은 처음에 메모리를 할당할 때 크기를 지정해주어야 하지만, ArrayList는 크기를 지정하지 않고 동적으로 값을 삽입하고 삭제할 수 있다.

  • 조회
    ArrayList는 각 데이터의 index를 가지고 있고 무작위 접근이 가능하기 때문에, 해당 index의 데이터를 한번에 가져올 수 있다.

  • 데이터 삽입과 삭제
    데이터의 삽입과 삭제시 ArrayList는 그만큼 위치를 맞춰주어야 한다.
    위의 사진으로 예를들면 5개의 데이터가 있을 때 맨 앞의 2를 삭제했다면 나머지 뒤의 4개를 앞으로 한칸씩 이동해야 한다.
    삽입과 삭제가 많다면 ArrayList는 비효율적이다.

    LinkedList 는 내부적으로 양방향의 연결 리스트로 구성되어 있어 참조하려는 원소에 따라 처음부터 정방향 또는 역순으로 순회 가능(배열의 단점을 보완하기 위해 LinkedList가 고안되었다.)

  • 조회
    LinkedList는 순차적 접근이기 때문에 검색의 속도가 느리다.

  • 데이터 삽입과 삭제
    LinkedList는 데이터를 추가·삭제시 가리키고 있는 주소값만 변경해주면 되기 때문에 ArrayList에 비해 상당히 효율적이다.
    위의 사진으로 예를들면 2번째 값을 삭제하면 1번째 노드가 3번째 노드를 가리키게 하기만 하면 된다.

2. Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력 받아 저장(List객체)하고 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
//		Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력 받아 저장(List객체)하고 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.

		Scanner sc = new Scanner(System.in);
		List<Integer> list = new ArrayList();
		while (true) {

			int input = sc.nextInt();
			list.add(input);
			if (input == -1) {
				break;
			}

		}
		int max = Collections.max(list);
		System.out.println(max);
	}

}

3. Scanner 클래스를 사용하여 6개 학점('A', 'B', 'C', 'D', 'F')을 문자로 입력받아 ArrayList에 저장하고, ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 평균을 출력하는 프로그램을 작성하라.

6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F) >> A C A B F D 2.3333333333333335
A: 4.0
B: 3.0
C: 2.0
D:1.0
F:0.0

package Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.DoubleSummaryStatistics;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		List<String> list = new ArrayList();
		
		List<Double> listG = new ArrayList();
		
		for (int i = 0; i < 6; i++) {
			String grade = sc.nextLine();
			list.add(grade);
			if (grade.equals("A")) {
				listG.add(4.0);
			}
			else if (grade.equals("B")) {
				listG.add(3.0);
			}
			else if (grade.equals("C")) {
				listG.add(2.0);
			}
			else if (grade.equals("D")) {
				listG.add(1.0);
			}
			else if (grade.equals("F")) {
				listG.add(0.0);
			}
		}
		
		DoubleSummaryStatistics stats = listG.stream()
                .mapToDouble(Double::doubleValue)
                .summaryStatistics();
		System.out.println(stats.getAverage());
		
	}

	}

0개의 댓글