코딩 테스트/알고리즘 풀이

[백준 - 2908] 상수

김띠띵 2022. 9. 1. 23:26

||문제 이해

수학을 정말 못하는 상수, 수학을 어릴때 열심히 공부할걸 이라는 생각이 또 드는 문제였다

단순 두 수를 거꾸로 돌려 비교하는 문제.


||해결 계획

String으로 받아 마지막 인덱스부터 비교해 찾으면 된다.


||계획 검증

734, 893

마지막 인덱스부터 비교

4 > 3 

그럼 437 출력

 

351, 531

마지막 인덱스부터 비교

1 = 1

5 > 3

그럼 351 출력


||구현

int main()
{
	ios::sync_with_stdio(0), cin.tie(0);
	string a, b, c; cin >> a >> b;
	for (int i = a.size() - 1; 0 <= i; --i)
	{
		if (a[i] == b[i]) continue;

		a[i] > b[i] ? c = a : c = b;
		break;
	}

	for (int i = a.size() - 1; 0 <= i; --i)
	{
		cout << c[i];
	}
	return 0;
}

||되돌아 보기

 

처음에 이러한 정수의 자리를 가지고 비교하는건 문자열로 다루는게 쉽지 않을까 생각이 가장 먼저 들어서

문자열을 사용했다.

 

이번 문제 뿐만 아니라 다른 문제도 그랬지만

대부분 항상 정수로 해결하는 나이스한 방법이 존재했다.

이런 방법이 있을때는 보통 이렇게 세자리수 고정. 이런 고정자리수가 많았던거 같다.

 

다음에는 정말 정수방법 하나와 문자열 방법 하나를 비교해보면서 해야겠다.

특히 고정자리수가 나올때는!!


||개선 코드

내가 반복문을 하나 줄인 코드이다.

int main()
{
	ios::sync_with_stdio(0), cin.tie(0);
	string a, b, c = ""; cin >> a >> b;
	for (int i = a.size() - 1; 0 <= i; --i)
	{
		if (c == "")
		{
			if (a[i] == b[i])
			{
				cout << a[i];
				continue;
			}
			a[i] > b[i] ? c = a : c = b;
		}
		cout << c[i];
	}
	return 0;
}

 

그리고 다른 정수로 풀이하는 나이스한 방법이다.

#include <bits/stdc++.h>
#define CAL(x) x = 100 * (x % 10) + 10 * (x / 10 % 10) + x / 100;
using namespace std;

int main()
{
	ios::sync_with_stdio(0), cin.tie(0);
	int a, b; cin >> a >> b;
	
	CAL(a);
	CAL(b);

	cout << (a > b ? a : b);
	return 0;
}