PS (C, C++)

[백준/C] 1547 공

최연재 2022. 8. 22. 00:47

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

 

1547번: 공

첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것

www.acmicpc.net

코드

#include <stdio.h>

void swap(int *a, int *b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

int findIndex(int a, int arr[])
{
	for (int i = 0; i < 3; i++) if (a == arr[i]) return i;
    return -1;
}

int main()
{
	int m, arr[3] = {1,2,3};
	int a, b;

	scanf("%d", &m);

	for (int i = 0; i < m; i++)
	{
		scanf("%d %d", &a, &b);
		swap(&arr[findIndex(a, arr)], &arr[findIndex(b,arr)]);
	}

	printf("%d", arr[0]);

	return 0;
}

코드 설명

메인 함수

반복문을 돌면서 계속 입력된 대로 컵을 이동시킨 후 배열의 0번째 인덱스에 저장된 값을 출력한다. (공의 위치는 변경되지 않으므로 가장 먼저 1번 컵의 아래에 공을 넣은 뒤 계속 그 자리에 있다.)

 

swap함수

두 값을 서로 바꾼다. 

 

findIndex함수

컵에 붙은 이름 (1번 컵, 2번 컵, 3번 컵)은 변경되지 않으므로 인수로 컵의 이름과 배열을 받는다. 반복문을 돌면서 컵의 이름과 배열의 값이 같을 때 그 값이 저장된 인덱스를 반환한다. 

느낀 점

공의 위치는 변하지 않으므로 0번째 인덱스의 값을 출력하면 된다. 예제를 직접 적어서 어떻게 진행되는지 확인한 후 코드를 금방 작성할 수 있었다. 

'PS (C, C++)' 카테고리의 다른 글

[백준/C & C++] 1225 이상한 곱셈  (0) 2022.08.24
[백준/C] 1718 암호  (0) 2022.08.24
[백준/C] 1076 저항  (0) 2022.08.22
[백준/C] 1085 직사각형에서 탈출  (0) 2022.08.22
[백준/C] 1598 꼬리를 무는 숫자 나열  (0) 2022.08.22