자바의 정석 오늘은 ch6 부분만 다시 복습하는데 그래도 2번 이상 들었다고 머리에 처음보다 더 잘 들어오고, 전에는 그냥 그렇구나!' 하고 넘겼던 부분도 '아, 이게 이래서?' 하면서 이해할 수 있었다. 처음에는 잘 머리에 안 들어오더라도 나는 전체적으로 이게 어떻게 흘러가는지 알고, 다시 보게 될 때 머리에 더 잘 들어오는 타입이라 복습이 중요한데 양이 너무 많아서 솔직히는 내가 이걸 이번 주 내로 다 할 수 있을까? 혹시 다 했는데도 모르겠으면 어떡하지? 그런 불안한 생각들 때문에 1차로 영상을 보면서 계속 불안했는데 다행히 머리에 잘 들어오고 있는 것 같아서 걱정이 조금은 사라졌고, 내가 이제 이 지식을 활용해서 효율적인 코드를 잘 작성할 수 있어야 할 텐데 하는 고민과 걱정은 여전하지만 그럼에도 일단은 나아가봐야겠다. 걱정만 하고 있으니, 뭐라도 하면 뭐 하나라도 할 수 있겠지. 일단 지금은 강의를 계속 듣고 있으니, 코드는 좀 못 작성할지라도 객체지향언어에 대한 이론적인 지식을 가지고 있게 되겠지. 그럼, 뭐 다른 언어를 배울 때 조금은 수월하겠지. 그런 긍정적인(?) 생각하며 오늘도 열심히 강의를 들으며 복습하고 정리하며 시간을 보냈다. 사실 오늘 팀 프로젝트 하는데 계획보다 시간을 많이 사용해서 아직 들어야 할 강의가 남아서 나머지 강의를 다 듣고 자겠지만, 그래도 일단 오늘의 할 일을 잘 끝낼 나를 믿으니 걱정 그만하고 강의 복습이나 하러 가야겠다. 팀 프로젝트 진행할 때 내가 걸림돌이 되지 않도록,, 열심히 해야지!
9시부터 10시까지는 알고리즘 코드 카타 시간으로 java, sql 각각 한 문제씩 풀었다.
class Solution {
public String solution(int num) {
String answer = "";
if (num % 2 == 0){
answer ="Even";
}
else {
answer = "Odd";
}
return answer;
}
}
def solution(num):
if num % 2 == 0:
return "Even"
else:
return "Odd"
문제 : 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
SELECT COUNT (DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL;
이후에는 30분동안 팀 프로젝트 발제가 있었고 프로젝트 관련 회의를 하는데 1시간 30분정도 걸렸다.
1시 30분부터는 어제 제출했던 개인과제에 대한 해설 영상을 보고, 나머지 시간에는 자바의 정석 chapter6을 다시 들으며 정리했다.
저녁을 먹기 전에 30분 동안 팀 프로젝트 역할을 나누고 전반적인 프로젝트를 어떻게 진행할지에 대한 이야기를 나누고 저녁 이후에는 내가 맡은 부분에 대한 코드를 임시적으로 구현했다. (다른 팀원들이 먼저 완성해야 이어서 코드를 작성할 수 있어서 내가 맡은 파트의 코드를 어떻게 구현할지, 어떤 식으로 동작하는지 정도만 구현했다.)
내가 맡은 파트는 특정 과목 점수 조회하는 코드로, 세부적으로는 수강생의 이름과 조회하고 싶은 과목을 입력 받아 수강생의 특정 과목에 대한 전체 회차의 성적을 조회할 수 있도록 하는 것이다.
// 아직 수강생의 정보와, 과목 정보 코드가 완성되지 않았기에 이 부분은 임시로 테스트 정보를 만들어서 조회 코드를 테스트하였다.
/*1차 테스트*/
import java.util.HashMap;
import java.util.Scanner;
public class StudentGradeSearch {
public static void main(String[] args) {
// 학생 이름을 key로하고 과목 및 성적을 value으로하는 HashMap 생성
HashMap<String, HashMap<String, Integer>> studentGrades = new HashMap<>();
// 테스트용 데이터
HashMap<String, Integer> DoyoungGrades = new HashMap<>();
DoyoungGrades.put("수학", 90);
DoyoungGrades.put("과학", 85);
DoyoungGrades.put("역사", 95);
studentGrades.put("도영", DoyoungGrades);
HashMap<String, Integer> JennieGrades = new HashMap<>();
JennieGrades.put("수학", 80);
JennieGrades.put("과학", 75);
JennieGrades.put("역사", 85);
studentGrades.put("제니", JennieGrades);
// 사용자 입력을 읽기위한 Scanner 객체 생성
Scanner scanner = new Scanner(System.in);
// 사용자에게 학생 이름을 입력하도록 요청
System.out.print("학생 이름을 입력하세요: ");
String studentName = scanner.nextLine();
// 학생이 레코드에 있는지 확인
if (studentGrades.containsKey(studentName)) {
// 사용자에게 과목을 입력하도록 요청
System.out.print("과목을 입력하세요: ");
String subject = scanner.nextLine();
// 지정된 과목에 대한 학생의 성적 가져오기
HashMap<String, Integer> grades = studentGrades.get(studentName);
if (grades.containsKey(subject)) {
int grade = grades.get(subject);
System.out.println(studentName + " 학생의 " + subject + " 성적은: " + grade);
} else {
System.out.println(studentName + " 학생의 " + subject + " 성적이 없습니다.");
}
} else {
System.out.println("학생을 찾을 수 없습니다.");
}
// Scanner 닫기
scanner.close();
}
}
위의 1차 시도 코드는 학생의 이름과 과목을 입력 scanner로 입력 받아서 그 과목에 대한 점수 하나만을 보여주는 코드이다.
🚨 하지만 이름과 과목을 입력 받으면 전체 회차에 맞는 모든 성적 결과를 조회할 수 있어야 하기 때문에 이 부분에 대해 조금 더 수정이 필요하다.
/*2~3차, 이름과 과목을 입력하면 그에 맞는 전체 회차 성적 조회*/
import java.util.HashMap;
import java.util.Scanner;
public class StudentGradeSearch {
public static void main(String[] args) {
// 학생 이름을 키로하고 세션 및 과목별 성적을 값으로하는 HashMap 생성
HashMap<String, HashMap<String, HashMap<String, Integer>>> studentGrades = new HashMap<>();
// 테스트용 샘플 데이터
HashMap<String, HashMap<String, Integer>>DoyoungSessions = new HashMap<>();
HashMap<String, Integer>DoyoungGradesSession1 = new HashMap<>();
DoyoungGradesSession1.put("객체지향언어", 90);
DoyoungGradesSession1.put("자바", 85);
DoyoungGradesSession1.put("SQL", 95);
DoyoungSessions.put("1회차",DoyoungGradesSession1);
HashMap<String, Integer>DoyoungGradesSession2 = new HashMap<>();
DoyoungGradesSession2.put("객체지향언어", 85);
DoyoungGradesSession2.put("자바", 80);
DoyoungGradesSession2.put("SQL", 90);
DoyoungSessions.put("2회차",DoyoungGradesSession2);
HashMap<String, Integer>DoyoungGradesSession3 = new HashMap<>();
DoyoungGradesSession3.put("객체지향언어", 88);
DoyoungGradesSession3.put("자바", 82);
DoyoungGradesSession3.put("SQL", 91);
DoyoungSessions.put("3회차",DoyoungGradesSession3);
studentGrades.put("도영",DoyoungSessions);
HashMap<String, HashMap<String, Integer>> JennieSessions = new HashMap<>();
HashMap<String, Integer> JennieGradesSession1 = new HashMap<>();
JennieGradesSession1.put("객체지향언어", 80);
JennieGradesSession1.put("자바", 75);
JennieGradesSession1.put("SQL", 85);
JennieSessions.put("1회차", JennieGradesSession1);
HashMap<String, Integer> JennieGradesSession2 = new HashMap<>();
JennieGradesSession2.put("객체지향언어", 85);
JennieGradesSession2.put("자바", 90);
JennieGradesSession2.put("SQL", 80);
JennieSessions.put("2회차", JennieGradesSession2);
HashMap<String, Integer> JennieGradesSession3 = new HashMap<>();
JennieGradesSession3.put("객체지향언어", 78);
JennieGradesSession3.put("자바", 86);
JennieGradesSession3.put("SQL", 92);
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, Integer>> sessions = studentGrades.get(studentName);
boolean foundSubject = false;
// 학생의 모든 세션을 반복
for (String session : sessions.keySet()) {
HashMap<String, Integer> grades = sessions.get(session);
if (grades.containsKey(subject)) {
foundSubject = true;
int grade = grades.get(subject);
System.out.println(studentName + " 학생의 " + session + "의 " + subject + " 성적은: " + grade);
}
}
if (!foundSubject) {
System.out.println(studentName + " 학생의 " + subject + " 성적이 없습니다.");
}
} else {
System.out.println("학생을 찾을 수 없습니다.");
}
// Scanner 닫기
scanner.close();
}
}
위의 코드는 이번 프로젝트에서 사용될 과목의 코드를 사용하여 이름과, 과목을 scanner로 입력 받아 전체 3회차의 모든 성적을 볼 수 있도록 코드를 작성하였다.
🚨 하지만 위의 코드는 회차가 1회차부터가 아닌 3회차부터 나오기 때문에 이 부분을 수정해야한다.
/*4차, 상태를 입력하면 상테에 맞는 학생의 이름, 아이디, 과목, 성적 조회*/
import java.util.HashMap;
import java.util.Scanner;
public class StudentGradeSearch {
public static void main(String[] args) {
// 학생 이름을 key로하고 세션 및 과목별 성적을 value으로하는 HashMap 생성
HashMap<String, HashMap<String, HashMap<String, Integer>>> studentGrades = new HashMap<>();
// 테스트용 샘플 데이터
HashMap<String, HashMap<String, Integer>> DoyoungSessions = new HashMap<>();
HashMap<String, Integer> DoyoungGradesSession1 = new HashMap<>();
DoyoungGradesSession1.put("객체지향언어", 90);
DoyoungGradesSession1.put("자바", 85);
DoyoungGradesSession1.put("SQL", 95);
DoyoungSessions.put("1회차", DoyoungGradesSession1);
HashMap<String, Integer> DoyoungGradesSession2 = new HashMap<>();
DoyoungGradesSession2.put("객체지향언어", 85);
DoyoungGradesSession2.put("자바", 80);
DoyoungGradesSession2.put("SQL", 90);
DoyoungSessions.put("2회차", DoyoungGradesSession2);
HashMap<String, Integer> DoyoungGradesSession3 = new HashMap<>();
DoyoungGradesSession3.put("객체지향언어", 88);
DoyoungGradesSession3.put("자바", 82);
DoyoungGradesSession3.put("SQL", 91);
DoyoungSessions.put("3회차", DoyoungGradesSession3);
studentGrades.put("도영", DoyoungSessions);
HashMap<String, HashMap<String, Integer>> JennieSessions = new HashMap<>();
HashMap<String, Integer> JennieGradesSession1 = new HashMap<>();
JennieGradesSession1.put("객체지향언어", 80);
JennieGradesSession1.put("자바", 75);
JennieGradesSession1.put("SQL", 85);
JennieSessions.put("1회차", JennieGradesSession1);
HashMap<String, Integer> JennieGradesSession2 = new HashMap<>();
JennieGradesSession2.put("객체지향언어", 85);
JennieGradesSession2.put("자바", 90);
JennieGradesSession2.put("SQL", 80);
JennieSessions.put("2회차", JennieGradesSession2);
HashMap<String, Integer> JennieGradesSession3 = new HashMap<>();
JennieGradesSession3.put("객체지향언어", 78);
JennieGradesSession3.put("자바", 86);
JennieGradesSession3.put("SQL", 92);
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, Integer>> sessions = studentGrades.get(studentName);
boolean foundSubject = false; // 해당 과목을 찾았는지 여부 변수 초기화
// 회차별 순서를 위한 변수
int sessionNumber = 1;
// 학생의 모든 세션 반복
for (String session : sessions.keySet()) {
HashMap<String, Integer> grades = sessions.get(session);
if (grades.containsKey(subject)) { // 해당 과목이 세션에 있는지 확인
foundSubject = true; // 과목을 찾았음을 표시
int 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();
}
}
🚨 지금 블로그를 작성하며 성적이 ABC와 같은 등급이 아닌 원점수로 성적이 조회된다는 수정 사항을 발견했다. 내일 추가로 더 수정해야겠다.