본문 바로가기
코딩테스트 준비/프로그래머스

[프로그래머스][C++] 두 수의 연산값 비교하기

by 스테디코디스트 2023. 10. 25.
반응형

<문제 소개>


<소스 코드>

#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으로 바꿔서 푼 풀이들도 많아서 이 방식으로 다시한번 풀어보았다.


<제출결과>