반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 한다.
M번의 수학 테스트 등수를 가지고 멘토와 멘티를 정한다
A학생이 멘토이고 B학생이 멘티가 되는 짝이 되었다면 A학생은 M번의 수학테스트에서 모두 B학생버다 앞서야 한다.
M번의 수학성정이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우 총 몇가지인지 출력해라.
🔍 압력
첫번째 줄에 반 학생수 N(1<=N<=20)과 M(1<=M<=10)이 주어진다.
두번째 줄부터 M개의 줄에 걸쳐 수학 테스트 결과가 학생 번호로 주어진다.
(학생번호가 제일 앞에서 부터 1등,2등 ... N등으로 표현된다.
만약 첫줄에 N이 4이고, 테스트 결과가 3 4 1 2 로 입력되었다면 3번학생이 1등 4번학생이 2등 순이다.
⚡ 입력 예시 1
4 3
3 4 1 2
4 3 2 1
3 1 4 2
⚡ 출력 예시 1
3
💡 내 풀이 및 생각 (4시간 .. 😥)
처음 내 구상은 맞았는데 뭔가 .. 조금씩 오류가 났다. 그것도 많이 .. 꾸준히
for문 범위 설정을 좀더 신경 써서 해야 겠다.
그리고 머리속에서만 생각하지 말고 계속 콘솔에 찍어보고 메모장에 그려봐야 오류가 줄어든다고!!!
입력은 이렇게 받아주고!
계산식을 설명해 보면
시험을 봤을 때 각 학생이 각 시험에서 몇등을 했는지 배열을 만들어서 정보를 저장했다.(stu1 배열)
각 시험에서의 등수니까 배열의 크기는 int[test 수]이다.
각 학생의 시험 정보니까 학생 수만큼 arrayList에 넣기 위해
최 외각에 학생수 만큼 for문을 돌려주고(k)
거기에 i번째 시험에서 j기준으로 쭉 돌때 k + 1 ( k+1번째 학생)의 등수를 수집한다.
처음에 바로 학생이 나오면 cnt는 1로 배열에 들어가고 뒤로 갈수록 1씩 증가해서 저장한다.
이렇게 test 수만큼 반복해서 각 시험 마다 학생의 등수를 저장해 줬다.
여기에서는 모든 시험에서 항상 클 경우를 찾기위한 조건인데
이때 자기 자신 성적과 비교하는 경우는 신경을 안썼던게 어차피 항상 커야하므로
같은 경우는 false 로 바껴서 조건에 영향을 주지 않았다.
그래서 i와 j 번째 학생을 모두 비교했을때 항상 크기가 작아야 계속 true이고
(한번이라도 조건에서 벗어나면 바로 false 니까)
그러한 조건을 만족하는 수만큼 answer에 반영되어 나온다.
코테 관련해서 많이 부담스러웠는데 강의를 통해 푸는 방법들을 배우니 이 시간이 즐겁습니다.
진짜 기능하나하나 다양한 방법으로 잘 가르쳐주십니다.
출처 : 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 대시보드 - 인프런 | 강의 (inflearn.com)
'알고리즘 > Java 코딩 테스트 준비' 카테고리의 다른 글
[Java] 자연수 n 이내의 소수 개수 출력하기 (0) | 2023.02.13 |
---|---|
[Java] 중복문자 제거하기 (0) | 2023.02.11 |
[Java] 친구가 많은 친구를 반장으로 뽑기! (0) | 2023.02.06 |
[Java] 봉우리 수 구하기. (0) | 2023.02.05 |
[Java] 격자판의 최대합 구하기 (0) | 2023.02.04 |
댓글