[코딩테스트 C++] 신입사원
오늘의 문제
https://www.acmicpc.net/problem/1946
신입사원
- 문제분석
입력 최대가 100000 => O(Nlog(N))인 알고리즘을 설계하면 됨
정렬에 사용되는 시간복잡도 O(log(N))
순차탐색 최대 O(N)
나의 풀이
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 100000;
pair<int, int> e[MAX];
int n;
// 신입사원
int solution(){
int answer = 1;
sort(e, e+n);
int mini = e[0].second;
for(int i=1;i<n;i++){
if(e[i].second < mini){
answer++;
mini = e[i].second;
}
if(mini == 1)
return answer;
}
return answer;
}
풀이 법
- 로직이 정확한데 왜 시간초과 나지!!! 하고 한참을 고민했다. Vector에 입력받아 solution에 보내는 과정이 시간이 오래 걸렸나보다.. 결국은 입출력에서의 시간때문에 틀렸던것. 백준으로 앞으로 계속 풀것이니 잘 생각해서 써야겠다.
- 서류순이든 면접순이든 오름차순으로 정렬한 후, 정렬한 분야의 1등의 다른 점수보다 작으면 answer을 올린다. 그리고 새롭게 갱신한다.
다른 답안
#include<iostream>
#include<cstdio>
using namespace std;
int T;
int N;
int v[100001];
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> T;
for (int t = 0; t < T; t++)
{
cin >> N;
for (int n = 0; n < N; n++)
{
int n1, n2;
cin >> n1 >> n2;
v[n1] = n2;
}
int tmp = v[1];
int cnt = 1;
for (int n = 2; n <= N; n++)
{
if (tmp >= v[n])
{
tmp = v[n];
cnt++;
}
}
cout << cnt << "\n";
}
return 0;
}
배울 점
- cin.tie(0); 은 실행속도를 높인다고 한다. 꼭 쓰자(test해보니 별 차이는 없는듯 하지만)
Author And Source
이 문제에 관하여([코딩테스트 C++] 신입사원), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@huijae0817/코딩테스트-C-신입사원저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)