파란색 : 풀면서 어려웠던 부분 or 고려해야 될 부분
빨간색 : 해결방법
초록색 : 느낀점
문제
우선 문제를 봤을 때 고려할 부분으로는 1,2,3학생 답 배열의 담겨있는 수들의 규칙이다.
내 풀이
학생 답 각각 배열을 생성하고 문제에서 보여주는 값들 중 다시 반복이 되는 수 전까지 담아준다.
int[] st1 = new int[5] { 1, 2, 3, 4, 5 }
int[] st2 = new int[8] { 2, 1, 2, 3, 2, 4, 2, 5 }
int[] st3 = new int[10] { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }
그리고 정답배열을 순회하면서 학생 배열과 비교하고 학생배열의 값과 같다면 정답카운트인 score 배열의 값을 변경 시켜주도록 한다. (코드는 5,8,10으로 나누었지만 확장성으로 st1.Length으로 나누어도 된다)
제한조건으로 최고점자가 동률이 나오면 오름차순으로 모두 출력해주어야 하기 때문에 for문을 통해 최대값을 구하고 그 값과 같은 배열만 list에 담도록 했다.
다른 사람의 풀이
우선 차이점으로 학생배열을 2차원 배열로 만들고, 이중for문을 통해 if문 한개로 모든 학생배열을 순회하는 방식으로 정답카운트를 체크하고 있다. 그리고 배열.Max()함수를 통해 최대값을 찾고 그 리스트를 리턴하는 방식이다.
내 코드처럼 각각 배열을 3개 생성하지 않고, 이차원배열로 생성했으며, if문으로 각자 배열을 매직넘버인 1,2,3를 넣어서 순회하는 것이 아닌 이중포문으로 한번에 비교를 한다는점에서 더 효율적인 풀이법인 것같다.
'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글
프로그래머스_C#)가운데 글자 가져오기 (0) | 2019.08.27 |
---|---|
프로그래머스_C#)체육복 (0) | 2019.08.26 |
05.09_CodeSignal(윈도우 폴더형식,중복 문자열 체크하기) (0) | 2019.05.09 |
05.07_CodeSignal(특수문자,띄어쓰기 제외하기) (0) | 2019.05.07 |
05.05_CodeSignal(문자열 속 숫자 뽑아내기) (0) | 2019.05.05 |