풀이1 (내풀이)
- 단순한 1차원배열로 풀었다.
- 배열을 0으로 초기화후, 제출한 경우 1로 바꾸고 미제출자의 경우 0이므로
- 0의 값을 가진 인덱스+1 (=미제출자의 출석번호) 을 출력하도록 하였다.
#include <iostream>
using namespace std;
/*
* absent[30] 배열을 0으로 초기화하고
* for문으로 28번
* 제출자의 출석번호를 받아 absent의 인덱스번호로 할당하여
* absent[i] = 1로 바꾼다.
* absent를 인덱스 오름차순으로 훑는데 1이면 출력한다.
*/
int main() {
int absent[30] = { 0 };
int k;
for (int i = 0; i < 28; i++)
{
cin >> k;
absent[k-1] = 1;
}
for (int i = 0; i < 30; i++)
if (absent[i] == 0)
cout << i+1 << endl;
return 0;
}
시간복잡도:
학생수를 n이라 하면,
과제를 낸 학생수만큼 for문으로 absent배열의 값을 바꾸고 -> O(n-2)
과제를 안낸 학생은 최악의 경우 n회 for문 내의 코드를 반복해야하므로, ->O(n)
따라서 O(n-2)+O(n) = O(n)
풀이2 (다른사람)
- 전체적인 풀이 접근은 풀이1과 같지만,
- 1차원배열의 크기를 31로 두어 인덱스와 출석번호의 차이 1을 고려하지 않아 더 좋다.
- if의 조건부에 1인 경우 맞다고 판단하므로 이를 이용해 조건부를 간단히 하였다.
#include <iostream>
using namespace std;
int main() {
int arr[31] = { 0, };
int a;
for(int i = 0; i < 28; i++) {
cin >> a;
arr[a] = 1;
}
for(int i = 1; i <= 30; i++) {
if(!arr[i]) cout << i << '\n';
}
return 0;
}
'전공 > 알고리즘(algorithm)' 카테고리의 다른 글
[C++] 백준(BOJ) 1157 단어공부 (1) | 2024.01.04 |
---|---|
[C++] 백준(BOJ) cin.tie(NULL) / ios_base::sync_with_stdio(false) / endl 대신 \n (1) | 2024.01.02 |
[C++] 백준(BOJ) 10988 팰린드롬인지 확인하기 (1) | 2024.01.02 |
[C++] 문자열 string vs char array 차이 비교 (0) | 2024.01.02 |
[C++] 동적 할당 1차원,2차원 배열 & 매개변수 (0) | 2024.01.02 |