[백준 10874] 이교수님의 시험 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
시험 문제의 정답이 일정한 패턴을 따르는 상황에서,
정답을 모두 맞힌 학생을 찾아서 리스트업하는 문제입니다.
정답 패턴은 다음과 같습니다:
- 문제 번호
j
에 대해 정답은 \((j - 1) \mod 5 + 1\) - 즉, 정답은 다음과 같이 반복됩니다:
1 2 3 4 5 1 2 3 4 5
학생의 답안이 이 패턴과 정확히 일치하는 경우,
해당 학생은 모든 문제를 정답으로 마킹한 것이므로 재시험 대상자가 됩니다.
접근법
- 먼저 정답 패턴
1 2 3 4 5 1 2 3 4 5
를 기준 배열로 고정합니다. - 각 학생의 제출 답안을 입력받고, 정답 패턴과 일치하는지 비교합니다.
- 완벽히 일치하는 학생의 번호를 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
class Program {
static void Main() {
int[] correct = new int[10];
for (int i = 0; i < 10; i++)
correct[i] = i % 5 + 1;
int n = int.Parse(Console.ReadLine());
for (int i = 1; i <= n; i++) {
var input = Console.ReadLine().Split();
bool perfect = true;
for (int j = 0; j < 10; j++) {
if (int.Parse(input[j]) != correct[j]) {
perfect = false;
break;
}
}
if (perfect) Console.WriteLine(i);
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int ans[10];
for (int i = 0; i < 10; i++)
ans[i] = i % 5 + 1;
int cntStud; cin >> cntStud;
for (int s = 0; s < cntStud; s++) {
int submits[10];
bool isPerfect = true;
for (int i = 0; i < 10; i++) {
cin >> submits[i];
if (submits[i] != ans[i]) isPerfect = false;
}
if (isPerfect) cout << s + 1 << "\n";
}
return 0;
}