IT 프로그래밍/백준

[C++] 백준 2908 상수

기술1 2024. 3. 24. 23:52
반응형

2908번: 상수 (acmicpc.net)

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

풀이


#include <iostream>
#include <string>


using namespace std;

int main()
{
	string a, b;
	cin >> a >> b;

	string res;

	for (int i = 2; i >= 0; i--)
	{
		if (a[i] > b[i])
		{
			res = a;
			break;
		}
		else if (a[i] < b[i])
		{
			res = b;
			break;
		}
		else
			continue;
	}
	for (int i = 2; i >= 0; i--)
	{
		cout << res[i];
	}
}

어떻게 풀지 고민이 조금 되었던 문제였습니다. 

 

종이에 써보면서 문제의 방향성을 찾아나갔습니다. 먼저 문자열 string a, b를 선언해주었습니다.

 

이 문제에서는 두 수를 입력받은 후 거꾸로 해서 큰 수가 나오게 하는 것이었습니다. 처음에는 해당 수들을 바꿔준 다음에 비교를 통해 풀까 생각해봤지만 방법이 조금 복잡해질 것 같아서 다른 방법을 생각해낸 것이 바로 for문을 역순으로 해서 비교를 하는 것이었습니다.

 

for문 비교문

먼저 for문을 사용하면서 뒤에서부터 a와 b를 비교하면서 큰 값이 나오면 for문을 벗어나서 a값 전체를 res가 받도록 만들어주었습니다. 

 

a[0] a[1] a[2]는 하나하나 비교를 할테지만 이것은 배열이 아니기 때문에 res = a를 하면 a의 전체값이 나오기 때문입니다.

 

for (int i = 2; i >= 0; i--)
{
	if (a[i] > b[i])
	{
		res = a;
		break;
	}
	else if (a[i] < b[i])
	{
		res = b;
		break;
	}
	else
		continue;
}

이런식으로 if문을 써주었습니다. else continue는 하지 않아서 정상적으로 작동은 하지만 깔끔함을 위해 추가했습니다. 

 

그리고 마지막에는 for문을 통해 res[i]를 반복하도록 했습니다. 이때 a의 값은 거꾸로 적히지 않은 값이기 때문에 for문을 통해 거꾸로 출력되게 해주는 것입니다. 

 

이렇게 풀면 문제가 끝납니다.

반응형

'IT 프로그래밍 > 백준' 카테고리의 다른 글

[C++] 백준 3003 킹, 퀸, 룩, 비숍, 나이트, 폰  (0) 2024.03.25
[C++] 백준 5622 다이얼  (0) 2024.03.25
[C++] 백준 2675 문자열 반복  (0) 2024.03.22
[C++] 11654 ASCII 코드  (0) 2024.03.20
[C++] 백준 9086 문자열  (0) 2024.03.20