1. 문제 상세
https://www.acmicpc.net/problem/10813

2. 문제 접근
크기가 100인 배열을 선언하고 해당 배열을 N 만큼만 사용하며 M번의 작업을 한다.
작업 전에 배열의 0 ~ N-1번 인덱스까지의 값을 모두 1 ~ N 까지의 값으로 초기화한다.
각 작업은 배열의 i - 1 번 인덱스의 값과 j - 1 번 인덱스의 값을 바꾼다.
M번의 작업 후 N크기의 배열을 출력한다.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int a[100], n, m, i, j, temp;
cin >> n >> m;
for(int x = 0; x < n; x++) a[x] = x + 1;
for(int x = 0; x < m; x++) {
cin >> i >> j;
temp = a[i - 1];
a[i - 1] = a[j - 1];
a[j - 1] = temp;
}
for(int x = 0; x < n; x++) cout << a[x] << " ";
}
크기가 100인 정수형 배열 a 와 정수형 변수 n, m, i, j, temp 를 선언.
cin 으로 바구니의 갯수와 공을 바꾸는 횟수를 입력받아 n과 m에 저장한다.
for문을 사용하여 x가 0일때 부터 n보다 작을 때 1씩 더하며 반복하도록 한다.
반복에서는 배열 a의 x번 인덱스의 값을 x+1 값으로 초기화한다.
위 반복문이 끝나면 for문을 사용하여 x가 0일때 부터 m보다 작을 때 1씩 더하며 반복하도록 한다.
반복에서는 cin 으로 인덱스 두 자리를 입력받아 각각 i, j 에 저장한다.
temp 에 배열 a의 i-1번 인덱스의 값을 저장하고 i-1번 인덱스의 값에는 j-1번 인덱스의 값을 저장한다.
그리고 j-1번 인덱스의 값에는 temp의 값을 저장하여 i-1번과 j-1번 인덱스의 값을 교환한다.
위 반복문이 끝나면 for문으로 x가 0부터 n보다 작을 때 1씩 더하며 반복, cout 으로 배열 a의 x번 인덱스의 값을 출력한다.
4. 성능 확인

5. 마무리
두 변수의 값을 교환할 때에는 여분의 변수가 하나 필요하다.
a, b의 값을 서로 교환하기 위해서는 c라는 변수가 필요하다고 생각하자.
a에 b의 값을 대입하고 b에 a의 값을 대입하려 하면 이미 a의 값이 b의 값이 되기 때문에 값이 같아진다.
이를 위해 다른 변수에 a의 값을 잠시 옮겨 두고 b의 값을 a에 대입, 그 후에 다른 변수의 값을 b에 대입한다.
'백준 - 단계별로 풀어보기 > 1차원 배열' 카테고리의 다른 글
[백준] 10811번 : 바구니 뒤집기 | C++ (0) | 2023.09.22 |
---|---|
[백준] 5597번 : 과제 안 내신 분..? | C++ (0) | 2023.09.21 |
[백준] 10810번 : 공 넣기 | C++ (0) | 2023.09.21 |
[백준] 2562번 : 최댓값 | C++ (0) | 2023.09.21 |
[백준] 10818번 : 최소, 최대 | C++ (0) | 2023.09.21 |