'5월 3일' 열다섯 번째 기록 [TIL]

가은·2024년 5월 3일
0

I Learned [본 캠프]

목록 보기
19/135
post-thumbnail

👩‍🏫 오늘의 출석

❓열다섯 번째, 9 to 9을 해 본 소감❓

프로젝트만 진행을 하면 시간이 너무 빨리 흐르는 것 같다. 안 그래도 할 일 많아서 부족한 시간인데 프로젝트 코드 작성하는 것만 해도 시간을 꽤 많이 사용해서 오늘도 내가 원래 계획해 둔 시간보다 조금 많이 부족하지만 그래도 오늘은 정말 ch 7까지 강의 다 듣고 정리해야 내일부터는 또 새로운 계획대로 진행할 수 있으니 오늘 할 일은 늦게까지 잡고 있어야 할 듯하다. 보충반 수업은 OT 수업 시간이 겹쳐서 바로 수업부터 듣게 되었는데 가볍게 내가 아는 내용 다시 정리하고, 당연히 알겠지 하고 넘어갔었던 부분들도 다시 상기 하며 정리할 수 있어서 좋았다.

📑오늘 학습한 내용

🧩오늘의 알고리즘 : 평균 구하기 🧩

/*java*/
class Solution {
    public double solution(int[] arr) {
        double answer = 0;
        int total = 0;
        
        for(int i = 0; i < arr.length; i++){
             total = total + arr[i];
        }
       answer = (double)total / arr.length;
        return answer;
    }
}
#python
def solution(arr):
    answer = 0
    total = sum(arr)
    answer = total / len(arr)
    return answer

🧩 오늘의 SQL : 동물의 아이디와 이름 🧩

문제 : 동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC

🧩 오늘의 SQL : 동물 수 구하기 🧩

문제 : 동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT COUNT (*)
FROM ANIMAL_INS

🧩 오늘의 SQL : 동명 동물 수 찾기 🧩

문제 : 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

SELECT NAME, COUNT(NAME) AS 'COUNT' 
FROM ANIMAL_INS 
GROUP BY NAME 
HAVING COUNT(NAME) > 1 
ORDER BY NAME

이후에는 어제 작성하던 코드의 수정이 필요한 부분에 대해 수정을 하고, 개인 과제 피드백 받은 것을 중심으로 코드를 수정하고 다시 풀어보는 시간을 가졌다.

💞 팀 프로젝트

public class StudentGradeSearch {
    public static void main(String[] args) {
        // 학생 이름을 key로하고 세션 및 과목별 성적을 value으로하는 HashMap 생성
        // HashMap<String, HashMap<String, HashMap<String, String>>> 첫 번째 key인 String은 학생의 이름
        // HashMap<String, HashMap<String, HashMap<String, String>>> 두 번째 key인 String은 세션
       //  HashMap<String, HashMap<String, HashMap<String, String>>> 세 번째 key인 String은 과목
        // HashMap<String, HashMap<String, HashMap<String, String>>> 마지막 value인 String은 과목의 성적
        HashMap<String, HashMap<String, HashMap<String, String>>> studentGrades = new HashMap<>();

        // 테스트용 샘플 데이터
        HashMap<String, HashMap<String, String>> DoyoungSessions = new HashMap<>();   // 첫 번째 key는 세션, 내부 키는 과목, value는 해당 과목 성적
        HashMap<String, String> DoyoungGradesSession1 = new HashMap<>();                      // key - 과목, value - 과목 성적
        DoyoungGradesSession1.put("객체지향언어", "A");
        DoyoungGradesSession1.put("자바", "B");
        DoyoungGradesSession1.put("SQL", "D");
        DoyoungSessions.put("1회차", DoyoungGradesSession1);

        HashMap<String, String> DoyoungGradesSession2 = new HashMap<>();                    // key - 과목, value - 과목 성적
        DoyoungGradesSession2.put("객체지향언어", "F");
        DoyoungGradesSession2.put("자바", "B");
        DoyoungGradesSession2.put("SQL", "A");
        DoyoungSessions.put("2회차", DoyoungGradesSession2);

        HashMap<String, String> DoyoungGradesSession3 = new HashMap<>();                     // key - 과목, value - 과목 성적
        DoyoungGradesSession3.put("객체지향언어", "D");
        DoyoungGradesSession3.put("자바", "C");
        DoyoungGradesSession3.put("SQL", "B");
        DoyoungSessions.put("3회차", DoyoungGradesSession3);

        studentGrades.put("도영", DoyoungSessions);

        HashMap<String, HashMap<String, String>> JennieSessions = new HashMap<>();        // 첫 번째 key - 세션, 내부 key - 과목, value - 해당 과목 성적
        HashMap<String, String> JennieGradesSession1 = new HashMap<>();                           // key - 과목, value - 과목 성적
        JennieGradesSession1.put("객체지향언어", "A");
        JennieGradesSession1.put("자바", "B");
        JennieGradesSession1.put("SQL", "C");
        JennieSessions.put("1회차", JennieGradesSession1);

        HashMap<String, String> JennieGradesSession2 = new HashMap<>();                         // key - 과목, value - 과목 성적
        JennieGradesSession2.put("객체지향언어", "F");
        JennieGradesSession2.put("자바", "D");
        JennieGradesSession2.put("SQL", "C");
        JennieSessions.put("2회차", JennieGradesSession2);

        HashMap<String, String> JennieGradesSession3 = new HashMap<>();                          // key - 과목, value - 과목 성적
        JennieGradesSession3.put("객체지향언어", "B");
        JennieGradesSession3.put("자바", "A");
        JennieGradesSession3.put("SQL", "B");
        JennieSessions.put("3회차", JennieGradesSession3);

        studentGrades.put("제니", JennieSessions);

        // 사용자 입력을 읽기위한 Scanner 객체 생성
        Scanner scanner = new Scanner(System.in);

        // 사용자에게 학생 이름 입력 요청
        System.out.print("학생의 이름을 입력하세요: ");
        String studentName = scanner.nextLine();

        // 사용자에게 과목 입력 요청
        System.out.print("과목을 입력하세요 (객체지향언어, 자바, SQL): ");
        String subject = scanner.nextLine();

        // 학생 레코드 확인
        if (studentGrades.containsKey(studentName)) {
            HashMap<String, HashMap<String, String>> sessions = studentGrades.get(studentName);         //외부 key - 세션 . 내부 key - 과목 , value - 과목 성적
            boolean foundSubject = false;       // 해당 과목을 찾았는지 여부 변수 초기화

            // 회차별 순서를 위한 변수
            int sessionNumber = 1;

            // 학생의 모든 세션 반복
            for (String session : sessions.keySet()) {
                HashMap<String, String> grades = sessions.get(session);     // 특정 세션에 대한 과목 성적을 담고 있는 해시맵, key - 과목, value - 과목의 성적
                if (grades.containsKey(subject)) {                 // 해당 과목이 세션에 있는지 확인
                    foundSubject = true;                               // 과목을 찾았음을 표시
                    String grade = grades.get(subject);        // 해당 과목의 성적 가져오기
                    System.out.println(studentName + " 학생의 " + sessionNumber + "회차의 " + subject + " 성적은: " + grade);        // 성적 출력
                }
                sessionNumber++; // 다음 회차로 이동
            }

            if (!foundSubject) {        // 과목을 찾지 못한 경우
                System.out.println(studentName + " 학생의 " + subject + " 성적이 없습니다.");
            }
        } else {
            System.out.println("학생을 찾을 수 없습니다.");
        }

        // Scanner 닫기
        scanner.close();
    }
}

최종적으로 완성된 테스트용 조회 파트 코드는 완성이 되었고, 이제 깃허브에 올린 후 팀원들에게 받은 피드백을 바탕으로 주말동안 우리가 진행하는 팀 프로젝트에 맞게 다시 코드를 수정해야한다.

그리고 개인과제 피드백 받은 부분을 새로운 레포지토리에 푸시 하고 싶어서 새로 Repository와 IntelliJ에서 파일까지 만들었는데 전에 연결되어 있던 레포에서 나와서 새로 만들 레포지토리를 연결하는 부분에서 꼬여서 시간을 꽤 흘러 보내다 결국은 해결 불가로 전부 삭제하고 다시 처음부터 새로 시작했다,,

❣️개인 과제 피드백

  1. App.java의 result는 나눗셈도 있기 때문에 자료형이 int보다는 double이나 float로 선언되어야 할 것 같습니다.
  2. answer.equals("remove") —> 이렇게, 문자열의 값을 비교하기 위해 저런 코드를 작성하시는데, 앞으로는 “remove”.equals(answer) 구조로, 상수.equlas로 검사해주세요. answer이라는 문자열 변수는 말 그대로 변수이기 때문에 예기치 못한 상황으로 인해, null이 될 수 있습니다.

위의 피드백에 맞춰 수정된 부분의 코드이다. 이런 식으로 피드백 받은 부분들을 수정하며 오전 시간을 보냈다.

  double result = 0;
  
     System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
            /*“remove”라는 문자열을 입력받으면 가장 먼저 저장된 결과가 삭제될 수 있도록 구현*/
            String answer = sc.nextLine();
            if ("remove".equals(answer)) {
                intArray.remove(0);
            }

            System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
            String reply = sc.nextLine();

            if ("inquiry".equals(reply)) {
                for (int num : intArray) {
                    System.out.println(num);
                }
            }

            System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
            String text = sc.nextLine();
            if ("exit".equals(text))
                break;
        }

3시부터 4시까지는 보충반 실시간 수업이 있어서 수업을 들으며 아래와 같은 내용에 대해 배웠다.

  • 반복문 (for, while, do-while, for each)
  • 조건문 (if, if-else, else if)
  • 기본적인 코드 컨벤션

이후 시간에는 자바의 정석 영상을 보면서 어제 다 못 끝낸 chapter 6 나머지 강의와 정리를 끝냈고, 이후 시간에는 chapter 7 강의와 정리를 하며 오늘 하루를 마무리할 예정이다.

0개의 댓글