본문 바로가기

문제풀이

[C언어] 백준 2908 상수

#include <stdio.h>
#include <string.h>

#define DIGIT 3

void reverse(char* n1);

int main(void)
{
    char num1[DIGIT + 1];
    char num2[DIGIT + 1];
    
    scanf("%s %s", num1, num2);

    reverse(num1);
    reverse(num2);
    
    printf("%s", strcmp(num1, num2) > 0 ? num1 : num2);
    printf("%s", atoi(num1) > atoi(num2) ? num1 : num2); //string.h대신 stdlib.h필요

    return 0;
}

void reverse(char* n1)
{
    char tmp;
    tmp = *n1;
    *n1 = *(n1 + 2);
    *(n1 + 2) = tmp;
}

 

풀이1

  • 문자열로 입력 받아 쭉 문자열로 처리하는 풀이 방식
  • 문자열의 비교를 위해서는 string 라이브러리의 strcmp사용할 수 있고, 정수로 바꿔 비교하려면 stdlib의 atoi를 사용하면 된다
  • long long의 범위를 넘어서는 자리 수를 입력받더라도 처리 가능

 

#include <stdio.h>

int main(void)
{
    int num1, num2;

    scanf("%d %d", &num1, &num2);

    num1 = (num1 % 10) * 100 + (num1/10 % 10) * 10 + (num1/100 % 10);
    num2 = (num2 % 10) * 100 + (num2/10 % 10) * 10 + (num2/100 % 10);

    printf("%d", num1 > num2 ? num1 : num2);

    return 0;
}​

 

풀이2

  • 정수로 입력받아 모듈러스를 활용해 reverse 후 비교 출력