Programmers 42840.모의고사
문제 풀이 과정을 공유드린다.
문제 출처
1. 문제설명
- 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, …
- 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, …
-
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, …
- 제한 조건
- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
2. 알고리즘 설계
- 수포자는 고정 값으로 3명
- 1, 2, 3 수포자의 규칙 탐색
- answers.size()만큼 for문을 돌리면서 정답을 맞췄다면 카운팅
3. 로직
- 수포자 규칙
- 수포자의 응답이라서 request의 약자인 req로 명명
int req1[] = {1,2,3,4,5}; int req2[] = {2,1,2,3,2,4,2,5}; int req3[] = {3,3,1,1,2,2,4,4,5,5};
- index
- 모듈라 연산을 이용해서 간단히 탐색할 수 있음.
-
이게 아니라면 index 변수를 따로 둬야함.
if(req1[i%5] == answers[i]) ans1++; if(req2[i%8] == answers[i]) ans2++; if(req3[i%10] == answers[i]) ans3++;
- 전체 코드
- 소감
- 다른 분들의 코드를 보니, sort()하고, for문을 이용한 코드가 많았다.
- return할 벡터값이 최대 3개밖에 안되서 if문으로 일일히 넣었다.
- 이게 속도 측면에서 좀 더 좋다고 생각한다.