728x90
문제
풀이방법
1. 나는 처음 28번까지 입력을 받은 뒤, 정렬을 시킨 후 1번부터 30번까지 하나하나 체크를 해서 배열 위치에 없다면 i를 print하는 방식으로 문제를 해결하려고 했다.
하지만 정렬을 사용하는 방법을 까먹어서 검색하였다.
sort함수
- #include<algorithm> 에 포함되어 있다.
- 사용방법은 sort(n, n+28) >> 즉 첫번째 값이 시작되는 주소위치, 끝 값의 주소위치를 지정해주면 알아서 오름차순 정렬을 해준다.
- sort(begin,end), 범위는 begin <= 배열 < end 이다.
2번째 작성코드를 보면
sort(n, n+28)이라고 하였는데
배열 n[28] = {0,}에서 n이 배열의 포인터, 시작지점이며 두번째 배열의 크기를 더해주면 끝 지점을 나타내 줄 수 있다.
** #include<algorithm>의 sort정렬은 최악의 경우에도 시간 복잡도를 nlogn을 보장하는 정렬 알고리즘이라고 한다.
첫번째 작성코드
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n[28] = {0,};
int a;
for(int i = 0; i < 29; i++)
{
cin >> a;
n[i] = a;
}
sort(n,n+28);
for(int i = 1; i<=30; i++)
{
if(i != n[i]) printf("%d\n",i);
}
}
문제는 출력부분에서 i를 동시에 비교를 하게되면
한번 안맞는순간 하나씩 밀리게 되어 원하는 출력값을 얻을 수가 없다.
따라서 다른 변수를 지정해주어 해결해 주었다.
두번째 작성코드 (정답)
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n[28] = {0};
int a;
for(int i = 0; i < 28; i++)
{
cin >> a;
n[i] = a;
}
sort(n, n + 28);
int j = 0;
for(int i = 1; i <= 30; i++)
{
if (i != n[j])
{
cout << i << endl;
}
else
{
j++;
}
}
return 0;
}
728x90
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
[백준] 11720번 C,C++ 초기화를 안해 틀려버린 (1) | 2023.10.23 |
---|---|
[백준] 3052번 (0) | 2023.10.18 |
[백준] 10951번 A+B, EOF(End-of-file) (1) | 2023.10.09 |
[백준_C++] 15552번 : 빠른 A+B (1) | 2023.10.04 |