본문 바로가기

백준/C++

[C++] 백준 1946번 신입 사원

728x90

 

시험 공부하기 싫다~~~

 

문제

https://www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성

www.acmicpc.net

 

오늘의 문제는 신입 사원~~

이것도 회의실 때처럼 비슷하게 하면 될 것 같다는 생각이 들었다.

여기서는 순서대로 입력을 받아서 서류 중심으로 오름차순 정렬을 하고, 서류 순위가 높은 첫 번째 사람의 면접 순위보다 면접 순위가 높은 사람이면 count 해주도록 하면 될 것 같다.

 

 

 

// 틀린 코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int n, m, count;
	cin >> n;
	while (n--) {
		count = 0;
		cin >> m;
		vector <pair<int, int>> newp(m);
		for (int i = 0; i < m; i++) {
			cin >> newp[i].first >> newp[i].second;
		}
		sort(newp.begin(), newp.end());

		for (int i = 0; i < m; i++) {
			if (newp[0].second>=newp[i].second) {
				count++;
			}
		}
		cout << count << "\n";
	}
	
	return 0;
}

 

흠... 사실 내가 이렇게 풀고 있는 것이 맞나...했는데 역시 예제 문제에 나온 2번째 케이스의 출력값이 나오지 않았다...

+ 추가) 난 바보다... 2번째 케이스의 출력값이 나오지 않은 것이 아니라 다 입력받은 후 출력하는 것이 아니기 때문에 입력값 중간에 출력되었던 것이었다...

 

 

 

 

https://tooo1.tistory.com/245

여기서 보니 내가 잘못한 것들이 많았다. 처음에 한명은 세어주어야 하기 때문에 count는 1로 초기화해야 하고 마지막에 for문을 돌려줄 때 i를 1부터 시작해야 비교를 할 수 있었다. 그리고 newp [0]. second부분에서 첫 번째인 사람이 무조건 뽑힌다는 보장이 없기 때문에 비교한 후 그 비교한 인덱스로 바꿔줘야 된다.

 

 

 

그래서 다시 고치면 다음과 같은 코드가 완성된다.

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int n, m, count;
	cin >> n;
	while (n--) {
		
		cin >> m;
		vector <pair<int, int>> newp(m);
		for (int i = 0; i < m; i++) {
			cin >> newp[i].first >> newp[i].second;
		}
		sort(newp.begin(), newp.end());
		
		count = 1;
		int temp = 0;

		for (int i = 1; i < m; i++) {
			if (newp[temp].second>newp[i].second) {
				count++;
				temp = i;
			}
		}
		cout << count << "\n";
	}
	
	return 0;
}

 

오예~~~~~

 

 

이곳에도 잘 설명되어 있으니 참고하면 좋을 것 같다.

https://velog.io/@rhkswls98/%EB%B0%B1%EC%A4%80-1946-C-%EC%8B%A0%EC%9E%85-%EC%82%AC%EC%9B%90

 

 

내일은 시험이 있기 때문에 여기까지만 작성해야 할 것 같다.

 

그럼 Bye Bye~~

 

728x90

'백준 > C++' 카테고리의 다른 글

[C++] 백준 2776번 암기왕  (4) 2023.12.20
[C++] 백준 2693번 N번째 큰 수  (0) 2023.12.19
[C++] 백준 2587번 대표값2  (2) 2023.12.17
[C++] 백준 1931번 회의실 배정  (2) 2023.12.16
[C++] 백준 2309번 일곱 난쟁이  (4) 2023.12.15