cyphen156

백준-1차원 배열 10813 공 바꾸기 본문

컴퓨터공학/알고리듬 풀이

백준-1차원 배열 10813 공 바꾸기

cyphen156 2024. 9. 11. 13:12

10813번: 공 바꾸기 (acmicpc.net)

 

이전 문제에서 이어지는 연계문제, 초기에 공이 모두 N번 바구니에 N번 공이 들어가있다고 가정한다. 

M번 교환을 시도하는데 두 바구니를 선택하여 서로 공을 교환한다.

제약사항

  • 0 < N, M <= 100
  • 0 < i <= j <= N

주의 사항

간단한 변수 교체 가능 여부를 물어보는 문제이다. 임시변수를 사용하여 두 바구니에 있는 공들을 바꾼다.

C 풀이

공 바꾸기_10813.c

인덱스를 0부터 쓰려고 반복문 안의 변수 사용이 항상 -1인덱스를 지정한다.

/**
* 백준 1차원 배열 10813 공 바꾸기
* 이전 문제에서 이어지는 연계문제, 초기에 공이 모두 N번 바구니에 N번 공이 들어가있다고 가정한다. 
* M번 교환을 시도하는데 두 바구니를 선택하여 서로 공을 교환한다.
*
* 제한사항
*****************************************
* 0 < N, M <= 100                       *
* 0 < i <= j <= N                       *
*****************************************
*
*
*
* 주의
* 간단한 변수 교체 가능 여부를 물어보는 문제이다. 임시변수를 사용하여 두 바구니에 있는 공들을 바꾼다.
*
* 풀이시간 10분
*/
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int N, M, i, j;

    scanf("%d%d", &N, &M);

    int* arr = (int*)malloc(N * sizeof(int));

    // 바구니 초기화
    for (int k = 0; k < N; ++k)
    {
        arr[k] = k+1;
    }

    // 공 바꾸기
    for (int k = 0; k < M; ++k)
    {
        scanf("%d%d", &i, &j);
        int tmp = arr[i-1];
        arr[i-1] = arr[j-1];
        arr[j-1] = tmp;
    }

    for (int k = 0; k < N; ++k)
    {
        printf("%d ", arr[k]);
    }
    return 0;
}

C++ 풀이

공 바꾸기_10813.cpp

/**
* 백준 1차원 배열 10813 공 바꾸기
* 이전 문제에서 이어지는 연계문제, 초기에 공이 모두 N번 바구니에 N번 공이 들어가있다고 가정한다. 
* M번 교환을 시도하는데 두 바구니를 선택하여 서로 공을 교환한다.
*
* 제한사항
*****************************************
* 0 < N, M <= 100                       *
* 0 < i <= j <= N                       *
*****************************************
*
*
*
* 주의
* 간단한 변수 교체 가능 여부를 물어보는 문제이다. 임시변수를 사용하여 두 바구니에 있는 공들을 바꾼다.
*
* 풀이시간 10분
*/

#include <iostream>
#include <vector>

using namespace std;

int main() {

    int N, M, i, j;

    cin >> N >> M;

    vector<int> arr;

    int IDX = 0;

    // 바구니 초기화
    while (1)
    {
        if (IDX > N)
        {
            break;
        }
        arr.push_back(IDX++);
    }

    for (int k = 0; k < M; ++k)
    {
        cin >> i >> j;

        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    for (int k = 1; k <= N; ++k)
    {
        cout << arr[k] << " ";
    }
    cout << endl;
    return 0;
}

 

모든 예제 코드의 소스파일은 제 개인 깃허브 레포지토리 에 있습니다.

Workspace/알고리듬 풀이 at main · cyphen156/Workspace · GitHub

 

Workspace/알고리듬 풀이 at main · cyphen156/Workspace

Studying . Contribute to cyphen156/Workspace development by creating an account on GitHub.

github.com