※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5602번 문제인 問題1이다.
문제는 아래 링크를 확인하자.

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

 

5602번: 問題1

1 行目は生 徒の人数 n と旅行候補の場所の数 m が空白で区切られ, i + 1 行に生徒 i のアン ケート結果を ○ は 1 で×は 0 で表し,空白で区切られた m 個の数字が並んでいる. 1 ≤ n ≤ 1000, 1

www.acmicpc.net

가장 많은 찬성표(1)을 받은 후보지부터, 같은 표의 경우 번호가 작은 후보지부터 하나씩 차례로 출력하는 문제이다.

 

{-찬성표 수, 후보지 번호}와 같은 pair를 오름차순으로 정렬한 뒤 차례대로 후보지 번호들만을 출력하면 문제의 조건을 만족하는 답을 얻을 수 있음을 관찰하자. 따라서 반복문을 이용해 주어진 앙케이트 결과를 읽어들여 위와 같은 pair들을 구하면 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

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

int N, M;
pair<int, int> arr[100];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> M;
	for (int i = 0; i < M; i++) arr[i].second = i;

	while (N--) {
		for (int i = 0; i < M; i++) {
			int x; cin >> x;
			if (x) arr[i].first--;
		}
	}

	sort(arr, arr + M);

	for (int i = 0; i < M; i++) cout << arr[i].second + 1 << ' ';
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1071 // C++] 소트  (0) 2023.03.14
[BOJ 25936 // C++] Rain Gauge  (0) 2023.03.13
[BOJ 16397 // C++] 탈출  (0) 2023.03.12
[BOJ 27659 // C++] Queue skipping (Easy)  (0) 2023.03.11
[BOJ 1358 // C++] 하키  (0) 2023.03.11

+ Recent posts