코딩테스트

[코딩테스트][프로그래머스] 위클리 챌린지 2주차

Chunho 2021. 8. 26. 22:19

해당 문제는 기업의 코딩 테스트 문제가 아니며, 비상업적, 비영리적 용도로 게시함을 알립니다.

 

문제 설명

 

상호평가를 통해 점수의 평균을 내고 학점을 부여해야한다.

먼저 n * n의 배열이 주어진다.

점수표

위의 점수표에서, i행 j열의 값은 i번 학생이 평가한 j번 학생의 과제 점수이다.

 

만약, 학생들이 자기 자신을 평가한 점수가 유일한 최고점, 또는 유일한 최저점이라면 그 점수는 제외하고 평균을 구해서 학점을 부여하면 된다.

 

 예를 들어, 0번째 학생은 자기 자신에게 100점, 1번째 학생에게 90점, 2번째 학생에게 98점, 3번째 학생에게 88점, 4번째 학생에게 65점을 부여하였다. 자기 자신을 평가한 점수가 유일한 최고점이므로 100점을 제외한 나머지 점수를 가지고 평균을 구한 뒤에 학점을 부여하면 된다.

 

학점 기준

학점을 부여하는 기준은 위와 같다.

 

n*n 배열을 매개변수로 받아 학생들의 학점을 문자열로 리턴해주면 된다.

 

문제를 해결하기 위해 먼저 학생별 평균점수를 저장할 배열을 만들어줘야한다. 이후 학생별 학점을 저장할 배열 또한 만들어주고, 학생별 평균점수를 돌며 학점을 부여해주면 된다.

 

모든 열을 더하며, 즉 학생 한 명이 받은 점수들을 더하며 배열에 저장해주면 되고, 자기 자신이 최대점수 또는 최소점수인 경우에는 평균을 구할때 점수와 인원을 동시에 빼주면 된다. 

 

평균값을 저장할 배열인 avg, 학생별 점수를 저장하는 maxmin배열, 등급을 저장할 배열인 grade 배열을 선언해 주었다. 

또한 점수의 합을 저장할 sum과 자기 자신이 최대점수, 최소점수인지 확인할 수 있게 boolean자료형으로 check 변수를 만들어주었다.

 

2중 for문을 사용하여 모든 학생들의 점수를 다 더하여 평균을 낸 후 avg 배열에 저장할 수 있도록 했다. 

 

각 학생들의 점수는 행이 아닌 열임에 주의하여 인덱스를 지정해주어야 한다.

 

i번째 학생들의 점수를 모두 더함과 동시에 유일한 최소값, 유일한 최대값인지 아닌지 판별하기 위해 안쪽 for문에서 학생별로 점수를 maxmin 배열에 저장해주었다. 

 

후에 i번째 학생의 점수가 유일한 최대값이거나 유일한 최소값이면 sum에서 해당 점수를 빼고, check 변수를 true로 설정해준 후 이에 따라 평균을 구할때 나눌 인원수를 다르게 지정해준다.

 

인원이 바뀌면 sum의 값과 maxmin 배열을 동시에 초기 상태로 돌려놓으면 된다. 

 

등급 지정

이후 조건문을 사용하여 등급을 지정해 준다.

 

 

그 뒤에 등급이 저장돼있는 배열을 문자열로 바꿔서 리턴해주면 된다.