관리 메뉴

cyphen156

백준-문자열 2908 상수 본문

컴퓨터공학/알고리듬 풀이

백준-문자열 2908 상수

cyphen156 2024. 9. 30. 15:10

제발 문제 이름좀 이런식으로 안내줬으면 좋겟다. 보통 프로그래머한테 상수라 함은 Constant를 생각하지 사람 이름을 생각하진 않으니까 

2908번: 상수 (acmicpc.net)

 

두 수를 입력받고 입력받은 자릿수를 역순으로 바꾼 후 비교하여 큰 수를 출력하면 된다.

이 문제의 핵심은 입력 데이터의 강제 형변환 또는 자릿수 파싱, 그리고 비교 연산이다.

C 풀이에서는 정수형으로 입력받아 자릿수 파싱을 통해 해결하겠다.

제약사항

  • 0 < Input < 1,000

주의 사항

없다.

C 풀이

상수_2908.c

자릿수 파싱법

/**
* 백준 2908 상수
* 두 수를 입력받고 입력받은 자릿수를 역순으로 바꾼 후 비교하여 큰 수를 출력하면 된다.
* 이 문제의 핵심은 입력 데이터의 강제 형변환 또는 자릿수 파싱, 그리고 비교 연산이다.
* 
* 
* 제한사항
*****************************************
* 0 < Input < 1,000                     *
*****************************************
*
*
*
* 주의
* 없다.
* 
* 풀이시간 30분
*/

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
    int first, second, temp = -1;
    char result[3] = {0};

	scanf("%d %d", &first, &second);

    // 자릿수 파싱
    for (int i = 0; i < 3; ++i)
    {   
        // 나머지 연산을 통해 한자리 수 비교
        int a = first%10, b = second%10;
 
        // 다음 연산을 위한 자릿수 다운
        first /= 10;
        second /= 10;

        if (temp != -1)
        {
            result[i] = (temp % 10) + '0';;
            temp /= 10;
            continue;
        }

        if(a > b)
        {
            temp = first;
            result[i] = a + '0';
        }
        else if(a < b)
        {
            temp = second;
            result[i] = b + '0';
        }
        else 
        {
            result[i] = a + '0';
        }
    }

    printf("%s\n", result); 
    return 0;
}

상수_2908_char.c

문자열로 처리방법

/**
* 백준 2908 상수
* 두 수를 입력받고 입력받은 자릿수를 역순으로 바꾼 후 비교하여 큰 수를 출력하면 된다.
* 이 문제의 핵심은 입력 데이터의 강제 형변환 또는 자릿수 파싱, 그리고 비교 연산이다.
* 
* 
* 제한사항
*****************************************
* 0 < Input < 1,000                     *
*****************************************
*
*
*
* 주의
* 없다.
* 
* 풀이시간 30분
*/

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void) {
    char num1[4], num2[4];
    char temp;

    scanf("%s %s", num1, num2);

    temp = num1[0];
    num1[0] = num1[2];
    num1[2] = temp;

    temp = num2[0];
    num2[0] = num2[2];
    num2[2] = temp;

    for (int i = 0; i < 3; i++) {
        if (num1[i] > num2[i]) {
            printf("%s", num1);
            break;
        }
        else if (num1[i] < num2[i]) {
            printf("%s", num2);
            break;
        }
    }

    return 0;
}

C++ 풀이

상수_2908.cpp

/**
* 백준 2908 상수
* 두 수를 입력받고 입력받은 자릿수를 역순으로 바꾼 후 비교하여 큰 수를 출력하면 된다.
* 이 문제의 핵심은 입력 데이터의 강제 형변환 또는 자릿수 파싱, 그리고 비교 연산이다.
* 
* 
* 제한사항
*****************************************
* 0 < Input < 1,000                     *
*****************************************
*
*
*
* 주의
* 없다.
* 
* 풀이시간 5분
*/


#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
    string first, second;

    cin >> first >> second;

    reverse(first.begin(), first.end());
    reverse(second.begin(), second.end());

    if (stoi(first) > stoi(second))
    {
        cout << first << '\n';
    }
    else 
    {
        cout << second << '\n';
    }
    return 0;
}

 

모든 예제 코드의 소스파일은 제 개인 깃허브 레포지토리 에 있습니다.

Workspace/알고리듬 풀이 at main · cyphen156/Workspace · GitHub

 

Workspace/알고리듬 풀이 at main · cyphen156/Workspace

Studying . Contribute to cyphen156/Workspace development by creating an account on GitHub.

github.com