초보 개발자의 이야기, 릿허브

[C++] 백준 11728번 배열 합치기 본문

코딩테스트/📗 백준 (BOJ)

[C++] 백준 11728번 배열 합치기

릿99 2022. 2. 22. 17:05
728x90
반응형
1. 문제이해

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

 

11728번: 배열 합치기

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거

www.acmicpc.net

 

두 배열이 주어질 때, 두 배열을 합친 다음 정렬해서 출력하는 것이 목표이다.

 

 

 

2. 문제풀이

 

문제를 제대로 읽자...

자체 하드모드로 풀이한 문제이다..

배열이 아니라 집합으로 보고 합집합을 구하는줄 알고 중복되는 원소는 제거하다가

왜 안되지 무한반복...  결론은 문제를 잘못읽은거였다..

여러분들은 문제 꼼꼼히 읽으세요...^^

 


 

문제 자체는 두 배열을 합치고, 정렬하면 되는 간단한 문제이다.

단, 주의할 점이 그냥 구현하면 시간초과가 발생한다는 점이다.

시간 초과를 방지하기 위해 아래와 같은 코드를 반드시 써주어야 한다.

 

ios::sync_with_stdio(false);
cin.tie(NULL);

 

해당 코드를 사용하면 cin, cout 전에 추가해주면 알고리즘이 동작할때 시간이 단축된다.

해당 문제에서는 C++ 사용시 위 코드를 써주지 않으면 시간초과가 발생한다.

해당 코드에 대한 자세한 설명은 아래 블로그에 잘 정리해놓으셨으니, 참고하자.

 

https://codecollector.tistory.com/381#comment14826253

 

(C++) - cout,cin 실행 속도 높이기(시간초과 해결법)

🍳머리말  문제를 푸실 때 printf, scanf를 사용했을 때 A/C를 받았지만 cout, cin을 사용했을 때 시간초과가 나는 경우가 있습니다. 이에 대한 이유와 해결방법을 설명한 글입니다. 📕 왜?  이는 cout

codecollector.tistory.com

 

위 코드를 써준 뒤의 구현은 간단하다.

배열 A와 B의 원소를 임의의 한 배열에 모두 입력시킨 후, sort 함수를 통해 정렬하기만 하면된다.

아래 소스코드를 통해 자세히 알아보자.

 

 

 

3. 소스코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	int N, M;
	int element;
	vector<int> v;   // 배열 A과 B의 원소를 입력받아 저장

	// 시간초과 방지
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	// 배열 A의 원소 입력받기
	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		cin >> element;
		v.push_back(element);
	}

	// 배열 B의 원소 입력받기
	for (int i = 0; i < M; i++) {
		cin >> element;
		v.push_back(element);
	}

	// 정렬
	sort(v.begin(), v.end());

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << " ";
	}

	return 0;
}

코드는 위에서 이야기했듯 매우 간단하다.

먼저 시간초과 방지를 위해 ios::sync_with_stdio(false); cin.tie(NULL); 구문을 추가한다.

이후 배열 A와 B의 원소를 저장할 벡터 v를 선언하고, 원소를 입력받는다.

원소를 모두 입력받은 뒤, 이를 정렬해주고 하나씩 출력해주기만 하면 된다.

 

주석없는 코드는 왼쪽 아래 더보기를 참고바랍니다.😊

더보기

<주석 없는 코드>

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

int main() {
	int N, M;
	int element;
	vector<int> v;     

	ios::sync_with_stdio(false);
	cin.tie(NULL);

	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		cin >> element;
		v.push_back(element);
	}

	for (int i = 0; i < M; i++) {
		cin >> element;
		v.push_back(element);
	}

	sort(v.begin(), v.end());

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << " ";
	}

	return 0;
}

 

 


문제에 대한 질문이나 지적은 언제나 감사하게 받고 있습니다.😊

 

 

 

 

 

728x90
반응형