1. 문제
class Solution {
public String[] solution(int[] numbers, int[] our_score, int[] score_list) {
int num_student = numbers.length;
String[] answer = new String[num_student];
for (int i = 0; i < num_student; i++) {
if (our_score[i] == score_list[i]) {
answer[i] = "Same";
}
else {
answer[i] = "Different";
}
}
return answer;
}
}
A반 학생들은 시험이 끝난 뒤 성적이 나오기 전 자기 시험지를 가채점해 보았습니다. 이후에 선생님이 실제 성적을 불러 줄 때 가채점한 점수와 실제 성적이 다른 학생들이 있어 선생님께 문의를 하려고 합니다.
성적을 문의하려는 학생들의 번호가 담긴 정수 리스트 numbers와 가채점한 점수가 성적을 문의하려는 학생 순서대로 담긴 정수 리스트 our_score, 실제 성적이 번호 순서대로 담긴 정수 리스트 score_list가 주어집니다. 주어진 solution 함수는 가채점한 점수가 실제 성적과 동일하다면 "Same"을, 다르다면 "Different"를 순서대로 리스트에 담아 return하는 함수입니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해 주세요.
2. 풀이
int[] numbers -> 학생 번호(학번)
int[] our_score -> 가채점
int[] score_list -> 실제점수
이 문제는 문제 부분에 이미 작성된 코드를 가지고 어떤 부분에 의해 오류가 발생한 것인지 확인하고 수정하는 디버깅 문제이다.
밑에 풀이로 7번째 줄에 score_list[numbers[i]-1]로 수정 후 정상적으로 테스트 통과 메시지가 나타났다.
class Solution {
public String[] solution(int[] numbers, int[] our_score, int[] score_list) {
int num_student = numbers.length;
String[] answer = new String[num_student];
for (int i = 0; i < num_student; i++) {
if (our_score[i] == score_list[numbers[i]-1]) {
answer[i] = "Same";
}
else {
answer[i] = "Different";
}
}
return answer;
}
}
3. 해석
일단 주어지는 학생의 수를 확인 해야하니 주어지는 학생의 번호가 몇개인지 확인을 위해 numbers.length;를 이용해서 num_student에 넣어준다. num_student는 실제 점수와 가채점한 점수가 맞지 않아 선생님께 문의하는 학생의 수 이다.
그리고 for문을 이용하는데, 배열 인덱스를 이용하기 위해 0부터 문의하는 학생의 수의 -1을 한 수까지 반복해준다.
if(our_score[i] == score_list[i] {
answer[i] = "same";
}
이 부분은 만약 가채점 점수와 실제 점수가 같다면 answer 배열에 "same"문자열을 추가 하라는 것이다.
그런데 이렇게 되면 학생번호[1] , 가채점 점수[100], 실제점수[100,80,90,84,20]이 주어질 때는 정상적으로 "Same"이 출력될 것이다.
그러나 학생 번호[3,4] , 가채점 점수 [ 85,93] , 실제 점수 [85,92,38,93,48,85,92,56]의 경우에는
학생 번호가 2개이기 때문에 for문을 통해 0부터 1까지의 인덱스를 반복할 것인데,
if(our_score[0] == score_list[0] ) 로 보면 가채점 점수[0] => 85 , 실제 점수[0] => 85를 비교해서 "Same"을 출력할 것이다.
또 인덱스 1로 보면 가채점 점수[1] => 93 , 실제 점수[1] => 92로 93==92는 false이기 때문에 else문
else{
answer[i] = "Different";
}
을 실행시키기 떄문에 "Different"를 출력할 것이다.
그러나 테스트2의 결과로는 결괏값과 기댓값이 달라서 테스트가 원하는 결과가 나오지 않는다.
이를 한 줄만 고쳐서 만족시켜주는 문제이기 때문에 어떻게 만족 시켜야 하냐면,
주어지는 가채점 점수[85,93]와 실제점수[85,92,38,93,48,85,92,56]를 학생 번호[3,4]에 맞게 조건문을 넣어줘야 한다.
if(our_score[i] == score_list[numbers[i] -1] 로 고쳐주면 모든 테스트 결과가 만족한다.
일단 numbers[i]를 먼저 보면, for문을 통해 인덱스를 0과 1이 주어지고 number[0]과 nubmers[1]이 된다.
그러면 numbers[i]의 값은 3과 4가 된다. 그 후 numbers[i] -1을 통해 3과 4에 -1을 해주면 2와 3이 되고,
score_list[2] , score_list[3]이 된다. 이제 결괏값과 기댓값이 같은지 확인 해보자.
이제 if(our_score[0] == socre_list[2])는 if(85 == 38)과 같은 것이다 이는 false값으로 반환되며
문제 수정 전에는 3번 학생의 가채점점수와 실제점수가 같다고 "Same"을 출력했으나, 지금은 false값이 반환되기 때문에 else문의 "Different"를 출력할 것이다.
4번 학생의 경우는 if(our_score[1] == score_list[3])이 되고 if(93 == 93)과 같기 때문에 true값이 반환되어 if문 안의 "Same"이 출력 될 것이다.
이제는 기댓값을 충족시켜줬기 때문에 테스트2 번도 테스트 통과의 결과가 나왔다.
아래와 같이 나머지 테스트들도 무난히 통과 된다.
'Programers코테연습(Java)' 카테고리의 다른 글
[Programmers TIL 3일차] 문자열 정렬하기(1) (0) | 2024.04.21 |
---|---|
[Programmers TIL 3일차] 옷 가게 할인받기 (0) | 2024.04.21 |
[Programmers TIL 2일차] 달리기 경주 (0) | 2024.04.20 |
[Programmers TIL 1일차] 붕대 감기 (0) | 2024.04.19 |
[Programmers TIL 1일차] 문자열 정수의 합 (1) | 2024.04.19 |