by CodeJin19
1 min read

Categories

Tags

오늘의 문제는 “3047번 ABC”.

임의의 서로 다른 세 수를 주고, 각 테스트케이스에서 요구하는 순서대로 출력하면 된다.

#include <iostream>

using namespace std;

int main()
{
	int a, b, c;
	int arr[3];
	char crr[5];

	cin >> a >> b >> c;
	cin >> crr;

	if (a < b)  //세 수의 크기 비교
	{
		if (b < c)
		{
			arr[0] = a;
			arr[1] = b;
			arr[2] = c;
		}
		else
		{
			arr[0] = a;
			arr[1] = c;
			arr[2] = b;
		}
	}
	else
	{
		if (a < c)
		{
			arr[0] = b;
			arr[1] = a;
			arr[2] = c;
		}
		else
		{
			arr[0] = b;
			arr[1] = c;
			arr[2] = a;
		}
	}
	
	for (int i = 0; i < 3; i++)  //주어진 순서대로 출력
	{
		switch (crr[i])
		{
		case 'A':
			cout << arr[0] << "\n";
			break;
		case 'B':
			cout << arr[1] << "\n";
			break;
		case 'C':
			cout << arr[2] << "\n";
			break;
		}
	}

	return 0;
}

이번 문제도 너무 쉽다고 생각한 나머지 생각하지 않고 손으로 먼저 코딩을 하기 시작했다.

그래서일까 이 코드에는 틀린 부분이 두 군데가 있는데

첫 번째는 출력 형식을 맞추지 않았다는 것이다.

출력 예시를 보면 세 수가 한 줄에 적어야 하는데, 각 숫자 출력 후 개행을 했다.

두 번째는 세 수의 크기 비교는 위의 코드보다 좀 더 복잡하다.

예를 들어 맨 윗부분을 보면

a - 4

b - 2

c - 6

인 경우, b가 a보다 작지만, 이 코드에서는 a와 b를 비교하지 않고 무조건 a가 더 작다고 판단하고 있다.

이 두 가지를 수정하면 아래와 같이 정답이 된다.

#include <iostream>

using namespace std;

int main()
{
	int a, b, c;
	int arr[3];
	char crr[5];

	cin >> a >> b >> c;
	cin >> crr;

	if (a < b)
	{
		if (b < c)
		{
			arr[0] = a;
			arr[1] = b;
			arr[2] = c;
		}
		else
		{
			arr[0] = a;
			arr[1] = c;
			arr[2] = b;
		}
	}
	else
	{
		if (a < c)
		{
			arr[0] = b;
			arr[1] = a;
			arr[2] = c;
		}
		else
		{
			arr[0] = b;
			arr[1] = c;
			arr[2] = a;
		}
	}
	
	for (int i = 0; i < 3; i++)
	{
		switch (crr[i])
		{
		case 'A':
			cout << arr[0] << " ";
			break;
		case 'B':
			cout << arr[1] << " ";
			break;
		case 'C':
			cout << arr[2] << " ";
			break;
		}
	}
    
    cout << "\n";

	return 0;
}