티스토리 뷰

문제

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

풀이과정

머지소트 과정 중 두 개의 정렬 된 배열을 합치는 과정을 구현하는 문제이다.

처음에는 벡터를 이용해 구현하려 했지만 시간초과가 났다.

그 후에 머지소트에서 merge 과정대로 구현을 했고 맞을 수 있었다.

문제를 풀이하면서 또 하나 배운 사실이 있다.

나는 cin, cout의 사용이 더 편리하다고 생각해서 cin, cout을 쓰는데 속도 때문에 ios::sync_with_stdio(false)를 항상 맨 위에 쓰고 시작하는데 속도를 위한거라면 이것말고도 cin.tie(0)을 해줘야 된다고 한다.

실제로 cin.tie(0) 만을 추가해봤는데 속도가 더 빨라졌다 앞으로는 두 개를 무조건 맨 위에 쓰고 시작해야겠다.

소스코드

#include <iostream>

#define MAX 1000001

using namespace std;

int A[MAX];
int B[MAX];
int ans[MAX];
int N, M;

void merge()
{
    int i = 0; int j = 0; int k = 0;

    while (i < N && j < M)
    {
        if (A[i] <= B[j]) ans[k++] = A[i++];
        else ans[k++] = B[j++];
    }

    // 남은 배열의 원소들을 모두 넣는 과정
    while (i < N) ans[k++] = A[i++];
    while (j < M) ans[k++] = B[j++];
}

int main()
{
    ios::sync_with_stdio(false);

    cin >> N >> M;

    for (int i = 0; i < N; i++) cin >> A[i];
    for (int i = 0; i < M; i++) cin >> B[i];

    int length = N + M;

    merge();

    for (int i = 0; i < length; i++)
    {
        cout << ans[i]; if (i != length - 1) cout << " ";
    }

    cout << "\n";

    return 0;
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 11729번 하노이 탑 이동 순서  (0) 2018.02.13
[백준] 1780번 종이의 개수  (0) 2018.02.13
[백준] 10816번 숫자 카드 2  (0) 2018.02.12
[백준] 10815번 숫자 카드  (0) 2018.02.12
[백준] 1167번 트리의 지름  (0) 2018.02.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함