갑자기 뜬금없이 github 프로필을 꾸미는 것에 꽂혀서,, 하루 온 종일 정신이 이쪽에 팔려있었다. 이런 꾸미기 기능은 너무 재밌지만, 너무 할 수 있는 게 많아서 시간이 많이 든다. 거기다 github는 뭔가 더 익숙하지 않아서 적용하는 데 오래 걸리고 확인하려면 커밋을 하고 리드미 파일에서 나와야 확인을 할 수 있어서 오늘만 커밋을 100번 넘게 했다..
/*1차 시도*/
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
answer[0] = x;
for(int i = 1; i < n; i++) {
answer[i] = x * (x+i);
}
return answer;
}
}
/*2차 시도*/
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
answer [0] = x;
for(int i = 1; i < n; i++) {
answer[i] = x * (i+1);
}
return answer;
}
}
위의 코드는 'x'의 음수 값을 제대로 처리하지 못한다는 문제가 있음. x가 음수이면 배열 요소가 증가하는 대신 감소하도록 코드를 수정해야 함.
/*3차 시도, 성공!*/
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
answer [0] = x;
for(int i = 1; i < n; i++) {
answer[i] = answer[i - 1] + x;
}
return answer;
}
}
루프의 경우 x * (i + 1)을 직접 계산하는 대신 답변[i] = 답[i - 1] + x를 계산. 이렇게 하면 'x' 부호에 따라 증가하거나 감소하여 배열 요소가 올바르게 계산되어 'x'의 양수 값과 음수 값 모두에 대해 올바른 출력을 생성할 수 있음.
문제 : FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, 'N')
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE "경기%"
ORDER BY WAREHOUSE_ID
equals()와 hashCode()는 오버라이딩 해주지 않으면 물리적으로 메모리에서 같은 값을 갖게 되어 진짜 같은지를 비교.
하지만 참조 변수에 경우 서로 다른 주소를 갖지만, 그 객체들의 내용이 전부 같으면 두 객체는 같다고 간주하여 내용이 같은지를 비교하려면 equals()와 hashCode()를 오버라이딩 해줘야 함.
2번째 심화반 실시간 강의도 들으며 오버로딩, 오버라이딩에 대해 조금 더 자세하게 배우고 다향성에 대해 배웠다.
private static void displayGradeView() {
// 학생 ID와 과목 ID를 입력 받음.
System.out.print("학생 ID를 입력하세요: ");
String studentId = sc.next();
System.out.print("과목 ID를 입력하세요: ");
String subjectId = sc.next();
// 해당 과목과 학생의 모든 회차에 대해 반복.
System.out.println("학생 " + studentId + "의 과목 " + subjectId + "의 학점:");
for (int round = 1; ; round++) {
// 현재 회차의 점수를 찾음.
Score score = findGrade(subjectId, studentId, round);
if (score == null) {
break; // 해당 회차의 점수가 없으면 반복문 종료
}
// 학점을 계산하고 출력.
Grade grade = score.setGrade();
System.out.println("회차 " + round + ": " + grade);
}
}
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; // 해당 과목, 학생, 회차에 해당하는 점수를 찾으면 반환.
}
}
// 해당 과목, 학생, 회차에 해당하는 점수가 없으면 null을 반환.
System.out.println("해당 과목, 학생, 회차에 해당하는 점수가 없습니다.");
return null;
}
선택한 학생의 특정 과목에 회차와 점수를 입력받아 grade로 저장하는 부분이 아직 완성되지 않아 일단은 grade 대신 입력받아 저장된 점수를 출력하는 코드를 작성하는 것으로 변경하였다.
private static void displayGradeView() {
// 학생 ID와 과목 ID를 입력 받음.
System.out.print("학생 ID를 입력하세요: ");
String studentId = sc.next();
System.out.print("과목 ID를 입력하세요: ");
String subjectId = sc.next();
// 해당 과목과 학생의 모든 회차에 대해 반복.
System.out.println("학생 " + studentId + "의 과목 " + subjectId + "의 점수:");
boolean foundScore = false;
for (int round = 1; ; round++) {
// 현재 회차의 점수를 찾음.
Score score = findGrade(subjectId, studentId, round);
if (score == null) {
break; // 해당 회차의 점수가 없으면 반복문 종료
}
// 현재 회차의 점수 출력
System.out.println(round +"회차 : " + score.getScore());
foundScore = true;
}
if (!foundScore) {
System.out.println("해당 학생과 과목의 점수가 없습니다.");
}
}
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; // 해당 과목, 학생, 회차에 해당하는 점수를 찾으면 반환.
}
}
// 해당 과목, 학생, 회차에 해당하는 점수가 없으면 null을 반환.
return null;
}
드디어 완성된 코드를 받아서 학점으로 조회될 수 있도록 코드를 수정하였다.
private static void displayGradeView() {
System.out.print("학생 ID를 입력하세요: ");
String studentId = sc.next();
System.out.print("과목 ID를 입력하세요: ");
String subjectId = sc.next();
System.out.println("학생 " + studentId + "의 과목 " + subjectId + "의 학점:");
// 모든 회차를 반복하고 학점을 표시
for (int round = 1; ; round++) {
Grade grade = findGrade(subjectId, studentId, round);
if (grade == Grade.N) {
break; // 해당 회차의 학점이 없으면 중지
}
System.out.println(round + "회차 : " + grade);
}
}
private static Grade 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.getGrade();
}
}
// 해당 회차에 대한 학점이 없을 경우 기본값으로 N을 반환
return Grade.N;
}
아래와 같은 출력 결과가 나오도록 작성한 코드! 드디어 제대로 된 결과를 확인 할 수 있어서 너무 좋았다.