백준 작심N일

이때, 정수 N이 최댓값을 가질 수 있도록 노력하시오. (주어지는 정수는 1보다 크거나 같고, 2,147,483,647보다 작거나 같다)

1 Like

일단 오늘부터 , , ,

1225번: 이상한 곱셈
#include <stdio.h>
#include <string.h>

int main(void)
{
    char A[20004];
    int i;
    long long int sum_a=0, sum_b=0;

    gets(A);

    for (i=0; A[i]!=' '; i++)
        sum_a += A[i] - '0';

    for(++i; A[i]!='\0'; i++)
        sum_b += A[i] - '0';

    printf("%lld \n", sum_a * sum_b);

    return 0;
}

2,147,483,647 ÷ 365 = 5,883,516.8410959
최대 588만년 ㄷㄷ

1252번: 이진수 덧셈 (B2 math)
#include <stdio.h>
#include <string.h>

int main(void)
{
    int i, j, ca, cb, add_next=0, sum, carry=0;
    char n[165];
    char a[82], b[82], result[82];

    gets(n);

    for (i=0; n[i]!=' '; i++)
        a[i] = n[i];
    a[i++] = '\0';

    for (j=i; n[j]!='\0'; j++)
        b[j-i] = n[j];
    b[j-i] = '\0';

    ca = strlen(a);
    cb = strlen(b);

    if (ca < cb)
    {
        strcpy(n, a);
        strcpy(a, b);
        strcpy(b, n);

        j = ca;
        ca = cb;
        cb = j;
    }

    while (ca > 0)
    {
        sum = (carry == 1) ? 1 : 0;
        sum += (cb == 0) ? 0 : b[cb-- -1]-'0';
        sum += a[ca-- -1]-'0';

        if (sum >= 2)
        {
            carry = 1;
            sum -= 2;
        }
        else carry = 0;

        result[ca] = sum + '0';
    }
    
    if (carry == 1) printf("1");
    
    printf("%s\n", result);

    return 0;
}

아직 미해결 , , , 반례찾는중
벌써 작심1일될뻔;

1292번: 쉽게 푸는 문제
#include <stdio.h>

int main(void)
{
    int A, B, n[1000], i, count=1;

    for (i=0; i<1000; i++)
        n[i] = (((count+1)*count)/2 < i+1) ? ++count : count;

    scanf("%d %d", &A, &B);

    count = 0;
    for (i=A-1; i<B; i++)
        count += n[i];

    printf("%d \n", count);

    return 0;
}

오우 다시 부활

1 Like

“벌써 작심1일될뻔;”

잘 돌아오셨어욤 :tada:

1 Like

image

하루하루 브론즈로 연명 중…

2 Likes
1547번: 공 (브3...)
#include <stdio.h>

int main()
{
    int M, i, x, y, a, no_cup=0;

	scanf("%d", &M);
	int cups[3];

	for (i=0; i<3; i++) cups[i] = (i == 0) ? 1 : 0;
	for (i=0; i<M; i++)
	{
		scanf("%d %d", &x, &y);

		a = cups[x-1];
		cups[x-1] = cups[y-1];
		cups[y-1] = a;
	}


	for (i=0; i<3; i++)
	{
		if (cups[i] == 1)
		{
			no_cup = 1;
			printf("%d \n", i+1);
			break;
		}
	}

	if (no_cup == 0)
		printf("-1 \n");

	return 0;
}

얼마나 쉬었길래 브1에서 막히니…
재활훈련이 시급합니다

(구글링하다가 처음 앎: C strrev, itoa 함수는 비표준임(strrev() function in C - GeeksforGeeks))

fprintf는 표준입니다

1 Like
1094번: 막대기
#include <stdio.h>
#define STICK 64

int main()
{
    int X, sum=STICK, cut, count=1;

    scanf("%d", &X);
    cut = STICK;

    if (STICK % X == 0)
        printf("1 \n");
    else
    {
        while (sum != X)
        {
            if (sum > X)
            {
                cut /= 2;
                count++;

                if (sum - cut >= X)
                {
                    sum -= cut;
                    count--;
                }

                // printf("sum:%d,  cut:%d\n", sum, cut);
            }
        }

        printf("%d \n", count);
    }

	return 0;
}
1357번: 뒤집힌 덧셈 (브1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Rev(char X[], int len);
int strtoint(char X[], int len);

int main(void)
{
    char X[5], Y[5], result[6];
    int sum = 0;

    scanf("%s %s", X, Y);
    
    Rev(X, strlen(X));
    Rev(Y, strlen(Y));

    sum = strtoint(X, strlen(X)) + strtoint(Y, strlen(Y));
    sprintf(result, "%d", sum);
    Rev(result, strlen(result));
    
    printf("%d\n", strtoint(result, strlen(result)));

    return 0;
}

void Rev(char *X, int len)
{
    char sample[len], a;

    strcpy(sample, X);

    for (int i=0; i<len/2; i++)
    {
        a = sample[i];
        sample[i] = sample[len-1-i];
        sample[len-1-i] = a;
    }

    strcpy(X, sample);
}

int strtoint(char X[], int len)
{
    int result = 0, tcount = 1;

    for (int i=0; i<len; i++)
    {
        result += (X[len-1-i] - '0') * tcount;
        tcount *= 10;
    }

    return result;
}

표준 함수 찾다가 못찾겠어서 그냥 직접 구현했네요…
숫자 -> 문자열은 sprintf 쓰면 되는데
문자열 -> 숫자 변환 함수는 무엇을 사용해야 되나요?
(itoa는 비표준이라 백준에서 컴파일 에러라네요)

strtol 사용해보세욤

#include <stdio.h>

int Rev(int x){
	int res=0;
	while(x){
		res*=10;
		res+=x%10;
		x/=10;
	}
	return res;
}

int main(void){
	int a, b;

	scanf("%d %d", &a, &b);
	printf("%d", Rev(Rev(a)+Rev(b)));

	return 0;
}

문자열 -> 숫자는 과거의 저도 구현해서 썼더라고요
python을 쓰시는 건 어떻…