반응형
<문제 소개>
<소스 코드>
#include <string>
#include <vector>
using namespace std;
int solution(int a, int b)
{
int answer = 0;
int i = b;
int j = 2 * a * b;
while(b > 0)
{
// b의 자릿수에 따라 a에 10을 곱하는 횟수가 정해짐
b /= 10;
a *= 10;
}
i += a; // 최종 i = [a x {10^(b의 자릿수)}] + b
answer = i >= j ? i : j;
return answer;
}
<소스코드 2>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(int a, int b)
{
int answer = 0;
int i = b + (a * pow(10, to_string(b).size()));
int j = 2 * a * b;
answer = i >= j ? i : j;
return answer;
}
<풀이과정>
1. 두 정수를 붙여서 쓴 값을 저장할 i, 2*a*b의 값을 저장할 j를 각각 선언하고, i에는 b를 넣어주고, j에는 2*a*b의 값을 넣어준다.
2. 두 정수를 붙인 값을 반환하기 위한 식은 a에 b의 자릿수만큼 10을 제곱한 값을 더해주어 b에 더해주면 된다.
3. 즉, "i = {a x 10^(b의 자릿수)} + b"로 구할 수 있다.
4. 따라서 b의 자릿수를 체크하기 위해 b가 0보다 큰 동안 반복을 하면서 b는 10으로 나눠주고 a는 10으로 곱해주는 작업을 진행한 뒤, 반복이 끝난 뒤의 a값을 기존 b의 값을 가지고 있는 i에 더해주어 ⊕연산의 값을 구할 수 있다.
5. 이렇게 구한 i와 j를 비교하여 i가 j보다 크거나 같은 경우에는 i의 값을 그 외에는 j의 값을 answer에 대입한 뒤 리턴해준다.
<소스코드 2 풀이>
1. b를 string으로 변환한뒤 변환한 문자열의 길이를 이용한다.
2. b의 값에 a와 10의 (b의 문자열 길이) 제곱을 곱한 값을 더해주어 ⊕연산의 값을 구할 수 있다.
<코멘트>
자릿수 카운팅이 조금 헷갈렸다.
그리고 사실 b를 string으로 바꿔서 단어의 갯수를 파악해서 하려했는데 to_string의 기본형식이 헷갈려서 그냥 이렇게 풀었다. 다른 풀이들을 보니 거의 string으로 바꿔서 푼 풀이들도 많아서 이 방식으로 다시한번 풀어보았다.
<제출결과>