반응형

<처음 풀이>

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

using namespace std;

int main() 
{
	int min = 0;
	int max = 0;
	char a[8], b[8];

	scanf("%s %s", &a, &b);

	for (int i = 0; i < strlen(a); i++)
	{
		if (a[i] == 53 || a[i] == 54) // 5 또는 6일때
		{
			min += (5) * pow(10, strlen(a) - 1 - i);
			max += (6) * pow(10, strlen(a) - 1 - i);
		}
		else
		{
			min += (a[i] - 48) * pow(10, strlen(a) - 1 - i);
			max += (a[i] - 48) * pow(10, strlen(a) - 1 - i);
		}
	}

	for (int i = 0; i < strlen(b); i++)
	{
		if (b[i] == 53 || b[i] == 54) // 5 또는 6일때
		{
			min += (5) * pow(10, strlen(b) - 1 - i);
			max += (6) * pow(10, strlen(b) - 1 - i);
		}
		else
		{
			min += (b[i] - 48) * pow(10, strlen(b) - 1 - i);
			max += (b[i] - 48) * pow(10, strlen(b) - 1 - i);
		}
	}

	printf("%d %d", min, max);

}


 

<stoi(String To Int) 함수를 사용한 코드> 

#include<stdio.h>
#include<string>
#include<cstring>
#include<algorithm>
#include<math.h>

using namespace std;

int min(char a[])
{
	for (int i = 0; i < strlen(a); i++)
	{
		if (a[i] == '6') a[i] = '5';
	}

	return stoi(a);
}

int max(char a[])
{
	for (int i = 0; i < strlen(a); i++)
	{
		if (a[i] == '5') a[i] = '56';
	}

	return stoi(a);
}

int main() 
{
	char a[8], b[8];

	scanf("%s %s", &a, &b);

	printf("%d %d", min(a)+min(b), max(a)+max(b));

}


 

<Python 코드>

a, b = map(int, input().split())
arr1 = []
arr2 = []
arr3 = [0, 0, 0, 0, 0, 0, 0]
min = 0
max = 0

for i in range(7):
    arr1.append(a % 10)
    a = int(a/10)
    arr2.append(b % 10)
    b = int(b/10)

arr1.reverse()
arr2.reverse()

for i in range(7):
    if arr1[i] == 6:
        arr1[i] = 5
    if arr2[i] == 6:
        arr2[i] = 5

for j in range(7):
    arr3[j] = arr1[j] + arr2[j]
    min += arr3[j]*10**(6 - j)

for i in range(7):
    if arr1[i] == 5:
        arr1[i] = 6
    if arr2[i] == 5:
        arr2[i] = 6

for j in range(7):
    arr3[j] = arr1[j] + arr2[j]
    max += arr3[j]*10**(6 - j)

print(min, max)

 

처음의 풀이는 두 수를 string으로 받아서

'5'의 경우 아스키코드값이 53,

'6'의 경우는 54이므로  min일 때는 5, max일 때는 6을 넣어주어 pow() 함수를 이용하여 정수로 바꿔주었다. 파이썬 풀이도 비슷한 맥락이다.

다른 분의 코드를 보다가 stoi()라는 함수를 처음 봐서 검색해봤는데 내가 했던 방식을 생략하고 String을 바로 int로 바꿔줄 수 있는 편리한 함수였다. C++11부터 string클래스를 정수 또는 실수로 변경해주는 stoi, stof, stol, stod라는 함수가 생겼고 #include <string>를 해주면 사용할 수 있다. 

 

 

 

https://www.acmicpc.net/problem/2864

 

2864번: 5와 6의 차이

문제 상근이는 2863번에서 표를 너무 열심히 돌린 나머지 5와 6을 헷갈리기 시작했다. 상근이가 숫자 5를 볼 때, 5로 볼 때도 있지만, 6으로 잘못 볼 수도 있고, 6을 볼 때는, 6으로 볼 때도 있지만, 5로 잘못 볼 수도 있다. 두 수 A와 B가 주어졌을 때, 상근이는 이 두 수를 더하려고 한다. 이때, 상근이가 구할 수 있는 두 수의 가능한 합 중, 최솟값과 최댓값을 구해 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 두 정수 A와 B가 주어

www.acmicpc.net

 

반응형

+ Recent posts