'5월 5일' 푸른 달 첫째 주 일요일의 기록 [TIL]

가은·2024년 5월 4일
0

I Learned [본 캠프]

목록 보기
21/135
post-thumbnail

📑오늘 학습한 내용

🧩오늘의 알고리즘 : 약수의 합🧩

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i = 1; i <= n/2; i++){
            if(n%i==0){
                answer += i;
            }
        }
     
        return answer+n;
    }
}

🧩 오늘의 SQL : 상위 n개 레코드 🧩

문제 : 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME LIMIT 1

🗝️ 여기서 잠깐! "LIMIT"

LIMIT이란 반환할 행수를 제한하는 기능으로 WHERE구로 검색한 후, ORDER BY로 정렬된 뒤 최종적으로 처리됨.

🧩 오늘의 SQL : 최솟값 구하기 🧩

문제 : 동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT DATETIME
FROM ANIMAL_INS
ORDER BY DATETIME LIMIT 1

🧩 오늘의 SQL : 어린 동물 찾기 🧩

문제 : 동물 보호소에 들어온 동물 중 젊은 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID ASC

💞 팀 프로젝트

    private static void displayGradeView() {
        // 수강생의 ID 입력
        System.out.println("\n==================================");
        System.out.print("조회할 수강생의 ID를 입력하세요: ");
        String studentId = sc.next();

        // 입력된 ID가 학생 목록에 있는지 확인
        if (studentList.containsKey(studentId)) {
            // 입력된 ID에 해당하는 학생 객체 가져오기
            Student student = studentList.get(studentId);
            // 학생이 수강한 과목 목록 가져오기
            List<String> subjects = student.getSubjects();

            // 수강 중인 과목 목록 출력
            System.out.println("수강중인 과목 목록:");
            for (String subjectId : subjects) {
                String subjectName = findSubjectName(subjectId);
                System.out.println("- " + subjectName);
            }

            // 조회할 과목 선택
            System.out.print("조회할 과목을 선택하세요: ");
            String selectedSubject = sc.next();

            // 선택한 과목이 수강 목록에 있는지 확인
            if (subjects.contains(selectedSubject)) {
                // 선택한 과목의 성적 조회
                System.out.println("수강생 " + student.getStudentName() + "의 " + selectedSubject + " 과목 성적 조회");

                // 과목의 최대 회차 구하기
                int maxRound = 0;
                for (Score score : scoreList) {
                    if (score.getSubjectId().equals(selectedSubject) && score.getStudentId().equals(studentId)) {
                        maxRound = Math.max(maxRound, score.getRound());
                    }
                }

                // 최대 회차가 0인 경우 성적 없음을 표시
                if (maxRound == 0) {
                    System.out.println("해당 과목의 성적이 없습니다.");
                } else {
                    // 과목의 각 회차별 성적 조회
                    for (int i = 1; i <= maxRound; i++) {
                        Score score = findGrade(selectedSubject, studentId, i);
                        if (score != null) {
                            Grade grade = score.calculateGrade();
                            System.out.println("회차 " + i + ": " + grade);
                        } else {
                            System.out.println("회차 " + i + ": 성적이 없습니다.");
                        }
                    }
                }
            } else {
                // 선택한 과목이 수강 목록에 없음을 표시
                System.out.println("해당 과목은 수강한 적이 없습니다.");
            }
        } else {
            // 입력된 ID에 해당하는 수강생이 없음을 표시
            System.out.println("해당 ID의 수강생이 없습니다.");
        }
    }

    // 과목 ID를 이용하여 과목 이름 찾기
    private static String findSubjectName(String subjectId) {
        for (Subject subject : subjectList) {
            if (subject.getSubjectId().equals(subjectId)) {
                return subject.getSubjectName();
            }
        }
        return ""; // 과목 이름을 찾지 못한 경우 빈 문자열 반환
    }

    // 과목 ID, 수강생 ID, 회차를 이용하여 해당 성적 찾기
    private static Score findGrade(String subjectId, String studentId, int round) {
        for (Score score : scoreList) {
            if (score.getSubjectId().equals(subjectId) && score.getStudentId().equals(studentId) && score.getRound() == round) {
                return score; // 해당 과목, 수강생, 회차에 해당하는 성적 반환
            }
        }
        return null; // 해당 회차의 성적이 없는 경우 null 반환
    }

💻 자바의 정석 내용정리

컬렉션 프레임웍의 핵심 인터페이스

인터페이스특징
List순서가 있는 데이터의 집합. 데이터의 중복을 허용
구현 클래스 : ArrayList, LinkedList, Stack, Vector 등순서 O, 중복 O
SET순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음
구현 클래스 : HashSet, TreeSet 등순서 X, 중복 X
Map키(key)와 값(vlaue )의 쌍으로 이루어진 데이터의 집합
순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용함
구현 클래스 : HashMap, TreeMap, Hashtable, Properties 등순서 X, 중복: 키 - X / 값 - O

ArrayList

  • List인터페이스를 구현하므로 저장 순서가 유지되고 중복을 허용
  • 데이터의 저장 공간으로 배열을 사용
  • ArrayList에 저장된 첫 번째ㅔ부터 객체를 삭제하는 경우(배열 복사 발생)
    ArrayList 에 저장된 마지막 객체로부터 삭제하는 경우(배열 복사 발생 안 함)

배열의 장단점

장점 : 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간이 짧음.

단점 :

  1. 크기를 변경할 수 없음
  • 크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야 함
    1. 더 큰 배열 생성 → 2. 복사 → 3. 참조 변
  • 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리가 낭비됨
  1. 비순차적인 데이터의 추가, 삭제에 시간이 많이 걸림
    • 데이터를 추가하거나 삭제하기 위해, 다른 데이터를 옮겨야 함
    • 그러나 순차적인 데이터 추가(끝에 추가)와 삭제(끝부터 삭제)는 빠름

LinkedList

  • 배열의 단점(1. 크기 변경X, 2. 추가 삭제 시간 ↑)을 보완
  • 배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결(link)
  • 데이터의 삭제 : 단 한 번의 참조변경만으로 가능

ArrayList vs LinkedList 성능 비교

  1. 순차적으로 데이터를 추가/삭제 - ArrayList
  2. 비순차적으로 데이터 추가/삭제 - LinkedList가 빠름
  3. 접근시간(access time) - ArrayList가 빠름
컬렉션읽기(접근시간)추가/삭제
ArrayList빠르다느리다순차적인 추가/삭제는 더 빠름. 비효율적인 메모리 사용
LinkedList느리다빠르다데이터가 많을수록 접근성이 떨어짐

0개의 댓글