백준 단계별로 풀어보기(C++)/4)1차원 배열

백준 10813) 공 바꾸기 (C++)

코테 2023. 3. 12. 05:13

전체 코드

#include <iostream>

int main()
{
	int arr[100];
	int N, M, i, j, tmp;

	std::cin >> N >> M;
	
	for (int count = 0; count < 100; count++)
	{
		arr[count] = count + 1;
	}

	for (int count = 0; count < M; count++)
	{
		std::cin >> i >> j;
		tmp = arr[i - 1];
		arr[i - 1] = arr[j - 1];
		arr[j - 1] = tmp;
	}

	for (int count = 0; count < N; count++)
	{
		std::cout << arr[count] << " ";
	}

}

풀이

  • 바구니는 최대 100개 가지므로 크기가 100인 배열 선언
  • 바구니안에 번호랑 똑같은 공이 있으므로 해당 인덱스에 count+1 저장 : 인덱스는 0 시작, 문제상 순서는 1부터 시작이므로 count+1값 저장
int arr[100];
//중간생략
for (int count = 0; count < 100; count++)
{
	arr[count] = count + 1;
}
  • M만큼 반복하는 반복문
  • i, j값 순서대로 입력받음
  • 공을 서로 바꿈 : 임시 변수 tmp에 i번째값 저장->i번째 바구니 공을 j번째 공으로 갱신->j번째 바구니는 tmp에 미리 저장한 i번째 공으로 갱신(i번째 바구니는 방금전 갱신으로 이전 본인의 값을 상실했으므로 tmp에 미리 복원한 값을 대신 씀) 
  • 위에서 설명했듯이 순서는 1, 인덱스는 0부터 시작이므로 인덱스부분에 -1한값을 대입한다.
for (int count = 0; count < M; count++)
{
	std::cin >> i >> j;
	tmp = arr[i - 1];
	arr[i - 1] = arr[j - 1];
	arr[j - 1] = tmp;
}
  • N(바구니 개수)만큼 반복하는 반복문
  • 해당 인덱스값에 해당하는 배열값 출력
for (int count = 0; count < N; count++)
{
	std::cout << arr[count] << " ";
}