'5월 8일' 열일곱 번째 기록 [TIL]

가은·2024년 5월 8일
0

I Learned [본 캠프]

목록 보기
25/135
post-thumbnail

👩‍🏫 오늘의 출석

❓열일곱 번째, 9 to 9을 해 본 소감❓

팀 프로젝트가 거의 막바지에 있어서 가벼운 마음으로 하루를 시작했다. 이미 필요한 필수 기능은 다 구현이 되어 추가 기능만 구현하면 되는데 필수 기능과 비슷하게 평균을 조회하는 기능이라 크게 어렵지는 않아서 금방 끝냈다. 그래서 필수 기능에서 조금 아쉬웠던 부분을 추가로 수정하고 자바의 정석 ch5 강의를 들으며 정리를 했다. 내일부터는 튜터님 말씀처럼 이론 학습 비율보다 코드를 따라서라도 더 많이 작성해 보는 것에 더 중점을 두고 학습해야겠다.

📑오늘 학습한 내용

🧩오늘의 알고리즘 : 자연수 뒤집어 배열로 만들기 🧩

문제 : 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

class Solution {
    public int[] solution(long n) {
        int[] answer =  new int[answer.length];
        int[] reanswer = new int[answer.length];
        
        for(int i=answer.length-1, j=0; i>0; i--,j++){
            reanswer[j] = answer[i];
        }
        
        return answer;
    }
}
class Solution {
    public int[] solution(long n) {

        int length = (int) Math.log10(n) + 1;
        
        int[] answer = new int[length];
        int[] reanswer = new int[length];

        for(int i = length - 1; i >= 0; i--) {
            answer[i] = (int)(n % 10);
            n /= 10;
        }

        for(int i = 0; i < length; i++) {
            reanswer[i] = answer[length - i - 1];
        }
        
        return reanswer;
    }
}

🧩 오늘의 SQL : 강원도에 위치한 생산공장 목록 출력하기 🧩

문제 : FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.

SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원%'
ORDER BY FACTORY_ID

10시부터 11시까지는 팀 프로젝트 추가 요구 사항 코드를 작성했다.

💞 팀 프로젝트

private static void averageInquiry() {
        System.out.print("평균 등급을 조회할 학생의 ID를 입력하세요: ");
        String studentId = sc.next();

        // 학생 이름 출력
        if (!studentList.containsKey(studentId)) {
            System.out.println("해당 학생이 존재하지 않습니다.");
            return;
        }
        String studentName = studentList.get(studentId).getStudentName();
        System.out.println("학생 이름: " + studentName);

        // 각 과목의 평균 등급 계산 및 출력
        for (Subject subject : subjectList) {
            int totalScore = 0;
            int count = 0;
            for (Score score : scoreList) {
                if (score.getStudentId().equals(studentId) && score.getSubjectId().equals(subject.getSubjectId())) {
                    totalScore += score.getScore();
                    count++;
                }
            }
            if (count > 0) {
                double averageScore = (double) totalScore / count;
                Grade averageGrade = GradeCalculator.calculateGrade((int) averageScore, subject.getSubjectType());
                System.out.println("과목: " + subject.getSubjectName() + ", 평균 등급: " + averageGrade);
            }
        }
    }

각 과목 별 평균을 조회하고 싶은 학생의 이름을 입력 받아 과목별 평균을 조회할 수 있도록 작성한 코드!

       // 학생 이름과 수강 과목 출력
        if (!studentList.containsKey(studentId)) {
            System.out.println("해당 학생이 존재하지 않습니다.");
            return;
        }
        String studentName = studentList.get(studentId).getStudentName();
        System.out.println(studentName+"학생이 수강중인 과목 입니다.");

        // 수강 중인 과목 목록 출력
        Student student = studentList.get(studentId);
        List<String> subjects = student.getSubjects();
        for (String subjectId : subjects) {
            for (Subject subject : subjectList) {
                if (subject.getSubjectId().equals(subjectId)) {
                    System.out.println(subject.getSubjectId() + " - " + subject.getSubjectName());
                    break;
                }
            }
        }

        // 조회할 과목 선택
        System.out.print("조회할 과목의 ID를 입력하세요: ");
        String subjectId = sc.next();

        // 해당 과목의 성적 조회
        System.out.println("=== " + getSubjectNameById(subjectId) + " 과목의 성적 ===");         //  과목 이름을 함께 출력

        for (int round = 1; ; round++) {
            Grade grade = findGrade(subjectId, studentId, round);
            if (grade == Grade.N) {
                break; // 해당 회차의 학점이 없으면 중지
            }
            System.out.println(round + "회차 : " + grade);
        }
    }
    // 과목 ID를 기반으로 과목 이름을 가져옴
    private static String getSubjectNameById(String subjectId) {
        // 과목 리스트를 반복하면서 과목 ID와 일치하는 과목을 찾음
        for (Subject subject : subjectList) {
            if (subject.getSubjectId().equals(subjectId)) {
                return subject.getSubjectName();  /* 과목 ID도 같이 출력 할려면 : subject.getSubjectId() 추가 */
            }
        }
        // 일치하는 과목 ID가 없을 경우
        return "알 수 없는 과목";
    }

기본 기능 중 내 파트에서 추가적으로 수정하면 좋을 것 같은 부분을 수정하였다.
1. 입력 받은 학생이 수강하는 과목과 입력받은 학생 ID에 맞는 학생의 이름을 보여주도록 수정
2. 아래에 조회한 점수의 과목이 어떤 과목인지 보여주도록 수정

이후 튜터님과 어떤 반을 수강하면 좋을지에 관한 상담과 현재 내 상태에 맞는 학습 방법에 대해 이야기를 나누었다.

💻 자바의 정석 CH5 내용정리

배열이란?

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

배열의 선언과 생성

  • 배열을 다루기 위한 참조변수의 선언
    1. 타입[] 변수이름

    2. 타입 변수이름[]

      타입[] 변수이름;         // 배열 선언(배열을 다루기 위한 참조변수 선언)
      변수이름 = new int[5]    // 배열 생성(실제 저장공간을 생성)

배열의 인덱스

  • 각 요소(저장공간)에 자동으로 붙는 번호
    • 인덱스의 범위는 ‘0부터 배열길이 -1’까지

배열의 길이

  • 배열이름.length
  • 배열은 한 번 생성하면 그 길이를 바꿀 수 없음

배열의 초기화

  • 배열의 각 요소에 처음으로 값을 저장하는 것
  • 자동 초기화 됨 - 0으로
    1. int[] score = new int[] {초기화할 값, 초기화할 값, …};
      1. 나눠서 선언하고, 초기화 하려면 1번 방법을 사용해야 함

        int[] score;

        score = new int[] {초기화할 값, …};

    2. int score = {초기화할 값, 초기화할 값, …};

배열 출력

  • char 배열은 println으로 바로 출력 가능
  • 그 외의 배열은 for문을 돌려서 사용해야 함
  • Arrays.toString(배열 이름) - 문자열로 바꿔서 출력 됨

2차원 배열

  • 테이블 형태의 데이터를 저장하기 위한 배열
    • int[][] score = new int [4][3]; // 4행 3열의 2차원 배열 score 생성
    • int[][] arr = { {초기화할 값, 초기화할 값, …}, {초기화할 값, 초기화할 값, …}}
  • 2중 for문

String 클래스

  • String 클래스는 char[]와 메서드(기능)를 결합한 것
    • String클래스 = char[ ] + 메서드(기능)
  • String 클래스는 내용을 변경할 수 없음 (read only)

Arrays(=클래스)로 배열 다루기

  • 배열의 비교와 출력 = equals(), toString()
    • System.out.println(Arrays.toString(arr)); // 1차원 배
    • System.out.println(Arrays.deepToString(arr2d)); // 2차원 배열
  • 배열의 복사 - copyOf(). copyOfRange()
  • 배열의 정렬 - sort()
    • 오름차순으로 정렬
    • Arrays.sort(배열 이름);

이후에는 보충반 실시간 강의를 들으며 클래스에 관한 강의를 들었다. 강의를 듣는 도중에 또 sout 단축어가 안 되고, print를 사용할 수 없는 오류가 떠서 한참을 해결하려고 구글링했다. 분명 저번에는 캐시 무효화를 하고 나면 바로 정상적으로 돌아왔는데 오늘은 파일을 삭제하고 다시 만들고, 거기에 캐시 무효화를 2번이나 했는데도 문제여서 튜터님을 찾아갔더니 5분도 채 안 되서 갑자기 정상적으로 동작하기 시작했다. 나참, 정말.. 문제있는 기기를 서비스센터에 가지고 가니 바로 고쳐졌다는 상황과 딱 맞아떨어졌다.. 그렇게 튜터님과 웃고 넘기는 해프닝이 되어버렸다.

😉 (알아도 큰 쓸모는 없지만 내가 좋아서 알리는) 추가 소식 😉

어제부터 할까말까 고민하다가 어제 3D 잔디 설정에 너무 많은 시간과 기력을 쏟아서 시도해보려다 포기한 productive box! 총 3번의 시도 끝에 성공! 포기할까 하는 생각이 들었지만 그래도 꿋꿋하게 해냈다! 장하다 나 자신🥰 그래도 어제 3D잔디 설정하면서 이것저것 찾아보고 해봐서 그런가 비교적 쉽게 끝냈다! 이젠 깃허브 프로필 꾸미기 무서울게 없다고~😁


0개의 댓글