37일차

김윤정·2024년 8월 7일

코딩

목록 보기
37/60
post-thumbnail

1. ArrayList 와 LinkedList 의 장단점은?

ArrayList

단점

  • 저장 공간을 늘리는 과정에서 시간이 비교적 많이 소요됩니다.
  • 인스턴스의 삭제 과정에서 많은 연산이 필요할 수 있습니다. 따라서 느릴 수 있습니다.

장점

  • 저장된 인스턴스의 참조가 빠르다.

LinkedList

단점

  • 저장된 인스턴스의 참조 과정이 배열에 비해 복잡하다. 따라서 느릴 수 있다.

장점

  • 저장 공간을 늘리는 과정이 간단하다.
  • 저장된 인스턴스의 삭제 과정이 단순하다.

2. 로또 프로그램을 작성하시오.(Set 으로)

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetLotto {

	public static void main(String[] args) {
		Set<Integer> lottoSet = new HashSet<>();

		final int LOTTO = 6;

		while (lottoSet.size() < LOTTO) {
			int num = (int) (Math.random() * 45 + 1);
			lottoSet.add(num);
		}
		System.out.println(lottoSet);

	}

}

3. Set에 대하여 설명하시오.

집합의 개념을 구현해 놓은 것이 set입니다.

set의 특징

  • 저장 순서가 유지 되지 않습니다.
  • 데이터의 중복 저장을 허용하지 않습니다. = set을 사용하면 중복 체크를 할 필요가 없습니다.

4. 출력이 아래와 같이 나오도록 하시오(필수) ⭐️ (예습)

HashSet<Num> set = new HashSet<>();
    set.add(new Num(7799));
    set.add(new Num(9955));
    set.add(new Num(7799));
    System.out.println("인스턴스 수: " + set.size());
    for(Num n : set)
        System.out.print(n.toString() + '\t');
    System.out.println();

출력
인스턴스 수: 2
7799 9955

  package Hw_2024_08_07;

import java.util.HashSet;

class Num{
	private int num;
	public Num(int num) {
		this.num=num;
	}
	@Override
	public String toString() {
		return String.valueOf(num); 
	}
	
	@Override
	public int hashCode() {
		return num % 3; 
	}
	@Override
	public boolean equals(Object obj) {
		if(num==((Num)obj).num) {
			return true;
		}else
			return false;
	}
}

public class HashMain {

	public static void main(String[] args) {
		HashSet<Num> set = new HashSet<>();
        set.add(new Num(7799));
        set.add(new Num(9955));
        set.add(new Num(7799));

        System.out.println("인스턴스 수: " + set.size());

        for(Num n : set)
            System.out.print(n.toString() + '\t');

        System.out.println();

	}

}

5. Set 호출되는 원리와 순서를 설명하시오. (예습)

  1. hash code 호출 (두 개 객체 주소-hash code가 같은지 비교)
    hashCode 는 Object에 있습니다. 오버라이드한 함수를 통과해 리턴 되는 값으로 군집(집합, 캐비넷)을 만듭니다. 그리고 그 다음 equals를 호출합니다.

  2. equals 호출 (문자열 비교 걸러냄)
    hash code의 호출로 군집히 형성되면 그 군집 내의 요소들을 비교해 나갑니다.

Set 호출에는 2단계를 거쳐 진행됩니다.

1.클래스에 정의된 hashCode 메소드의 반환 값을 통해 분류.

2.선택된 부류 내에서 equals 메소드를 호출하여 비교.

6. Set 과 List 의 차이는?

Set은 index 값 중복이 없고 순서가 보장되지 않습니다.
List는 index 값 중복 가능하고 add 한 순서대로 값이 저장됩니다

7.아래의 쿼리문을 작성하시오.

-- 10번 부서 또는 20번부서 또는 30번 부서에 속하는 사원은?

select *from emp where deptno in(10,20 ,30);

-- 10번 및 30번 부서에 속하는 모든 사원의 이름과 부서 번호를 출력하되,이름을 알파벳순으로 정렬하여 출력하라.

select ename, deptno from emp where deptno in(10,30) order by ename;

-- 1981년 2월 20일 ~ 1981년 5월 1일에 입사한 사원의 이름,직업 및 입사일을 출력하라.

select*from emp where hiredate between '1981/02/20' and'81/05/01';

-- 사원중 82년도에 입사한 사원은?

select*from emp where hiredate between '82/01/01' and'82/12/31';

-- 각 사원의 연봉 계산을 하는 쿼리문(NVL 함수)

select ename,sal,comm,sal*12+nvl(comm,0)as"연봉" from emp;

-- 이번달 마지막날을 구하시오.

select last_day(sysdate)from dual;

--오늘을 기준으로 가장 가까운 다음 수요일은 언제인지 알아보는 쿼리문

select sysdate, next_day(sysdate,'수요일')as "다음주 수요일"from dual;

-- 각 직원들이 근무한 개월 수를 구하는 쿼리문

select ename, hiredate,add_months(hiredate,4)from emp;

-- 어제 오늘 내일 날짜를 구하시오.

select sysdate-1어제, sysdate 오늘 ,sysdate+1as "내일" from dual;

-- 사원들의 입사일에서 입사 년도와 입사 달, 입사 일자를 각각 컬럼으로 출력하는 쿼리문

SELECT ENAME, SUBSTR(HIREDATE, 1, 2) as "년도", SUBSTR(HIREDATE, 4, 2) as "달", SUBSTR(HIREDATE, 7, 2) as "일"FROM EMP;

8. 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

  package Hw_2024_08_07;

import java.util.ArrayList;
import java.util.Scanner;

class Grade {
	private ArrayList<String> list;
	final int NUM = 6;

	public Grade() {
		list = new ArrayList<String>();
	}

	public void inputGrade() {
		Scanner sc = new Scanner(System.in);
		System.out.println("6개 학점을 'A', 'B', 'C', 'D', 'F'로 입력하시오");
		while (list.size() < NUM) {
			list.add(sc.next());
		}
	}

	public double getAvg() {
		double sum = 0;
		double avg = 0;

		for (String str : list) {

			switch (str) {
			case "A": {

				sum += 4.0;
				break;
			}
			case "B": {

				sum += 3.0;
				break;
			}
			case "C": {

				sum += 2.0;
				break;
			}
			case "D": {

				sum += 1.0;
				break;
			}
			case "F": {

				sum += 0;
				break;
			}

			default:
				System.out.println("A, B, C, D, F로 입력해주세요");
			}

			avg = sum / NUM;

		}

		return avg;
	}
}

public class AvrArray {

	public static void main(String[] args) {
		Grade grade = new Grade();
		grade.inputGrade();
		System.out.println("평균점수: " + grade.getAvg());

	}

}

0개의 댓글