[백준/C++] 10814 - 나이순 정렬

정승우·2021년 2월 19일
0

[백준/C++] BOJ 공부

목록 보기
10/25

문제링크: https://www.acmicpc.net/problem/10814

문제


온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.

입력


첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.

출력


첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

풀이


#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

std::vector<std::vector<std::string>> v(201);

int main() {
	std::ios::sync_with_stdio(false);
	std::cout.tie(NULL);
	std::cin.tie(NULL);

	int N; std::cin >> N;
	
	for (int i = 0; i < N; i++) {
		int num; std::cin >> num;
		std::string name; std::cin >> name;

		v[num].push_back(name);
	}

	for (int i = 1; i <= 200; i++) {
		for (int j = 0; j < v[i].size(); j++) {
			std::cout << i << " " << v[i][j] << "\n";
		}
	}

	return 0;
}

정렬

시간이 3초나 주어진 상태에서 입력이 들어온 순서대로 정렬하고자 한다면 굳이 stable_sort를 사용할 이유가 없다. 그냥 많은 시간을 이용해 1살부터 200살까지 모두 loop를 돌려 나이순서 -> 입력순서대로 출력하게 만들었다.

노트


이전 문제에서 배운 것 처럼 쉬워보이는 것은 쉽게 접근했다.
시간 복잡도면에서는 좋은 코드라고 할 수는 없지만 금방 풀었다는 점에 의미를 둔다.

profile
Computer Science & Engineering 19

0개의 댓글