int st1[5] = {1,2,3,4,5}; int st2[8] = {2,1,2,3,2,4,2,5}; int st3[10] = {3,3,1,1,2,2,4,4,5,5};
다음과 같은 패턴을 찾을 수 있습니다.
특정 패턴 규칙 구하기
5번째마다 같은패턴 8번째마다 같은 패턴 10번째마다 같은 패턴 이것을 코드로 나타내면 어떻게 나타낼 수 있을까요?
바로 (idx % 5),(idx % 8),(idx % 10) 의 형식으로 나타내면 5번째마다 패턴으로 규칙적으로 구할 수 있습니다.
예를 들어보겠습니다.
1 2 3 4 5 6 7 8 9 10 11
i=0 일 경우 0 % 5 = 0
i=1 일 경우 1 % 5 = 1
i=2 일 경우 2 % 5 = 2
i=3 일 경우 3 % 5 = 3
i=4 일 경우 4 % 5 = 4
i=5 일 경우 5 % 5 = 0
i=0부터 시작하며 i번째는 시험문제라고 생각하겠습니다.
i가 5가 되는 순간 나머지는 0이 되게됩니다. 따라서 0~4까지 총 5번의 패턴을 확인할 수 있는것입니다.
만약 나머지값이 answer[i]과 같다면, 즉 문제의 정답과 같다면 문제의 정답의 개수를 늘려주는것입니다.
가장 높은 점수 찾기
그래서 총 3명의 수포자들중에서 가장 높은 점수를 얻은 사람을 winner을 구해주고 만약 다시 모든 수포자의 점수를 점수가 가장높은점수와 같을 경우 answer에 값을 넣어주게됩니다. answer에는 수포자의 1,2,3번중 가장높은 점수를 받은 사람이 들어가있게됩니다. (단, 여럿일 경우도 존재하므로 그부분도 확인해야합니다)
int win = students[0]; // 가장높은 점수를 받은 사람 찾기 for(int i=0; i<students.length; i++){ if(win < students[i]){ win = students[i]; } } // 같은 값을 가진 여럿사람일 경우도 있기때문에 확인을 해서 넣어줍니다. for(int i=0; i<students.length; i++){ if(win == students[i]){ winner.add(i); } } answer = newint [winner.size()]; // 가장 높은 점수를 가진사람의 값을 answer에 담아줍니다. for (int i=0; i<winner.size();i++){ answer[i]=winner.get(i)+1; } }