// ver.2 효율적 코드(함수)
#include <stdio.h>

// 한라봉의 총 무게
int x;

// 입력 :  상자의 무게
// 출력 :  상자를 사용한 횟수
int whil(int N)
{
	// 상자를 사용한 개수
	int r = 0;
	// 한라봉의 무게가 상자의 작을 때 까지 반복
	while (x >= N)
	{
		// 한라봉의 무게에서 상자의 무게를 뺴어
		// 상자에 한라봉을 담았다는걸 표현해준다.
		x -= N;

		// 사용한 상자 개수를 1 증가시켜준다.
		r++;
	}
	return r;
}

int main(void)
{
	// 한라봉을 담기 위한 상자들을 사용한 최소 횟수 저장
	int a;

	scanf("%d", &x);

	// a에 10kg, 5kg, 3kg, 1kg 박스들을 사용한 횟수를 저장시킨다.
	a = whil(10) + whil(5) + whil(3) + whil(1);

	// 총 상자를 사용한 최솟값을 출력한다.
	printf("%d", a);
}

'SFPC > 2021' 카테고리의 다른 글

2021 SFPC E0  (0) 2023.02.14
2021 SFPC E1  (0) 2023.02.14
2021 SFPC D0  (0) 2023.02.11
2021 SFPC D1  (0) 2023.02.11
2021 SFPC C2  (0) 2023.02.10
2021 SFPC C1  (0) 2023.02.10

#include <stdio.h>

int main()
{
	printf("2022-04-16");
}

'SFPC > 2021' 카테고리의 다른 글

2021 SFPC pB1 ver.2  (0) 2023.02.15
2021 SFPC E1  (0) 2023.02.14
2021 SFPC D0  (0) 2023.02.11
2021 SFPC D1  (0) 2023.02.11
2021 SFPC C2  (0) 2023.02.10
2021 SFPC C1  (0) 2023.02.10
#include <stdio.h>

// M = 달 별 마지막 날을 저장한 배열
// W = 요일들을 저장한 배열
int M[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
char W[7][4] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };

// 입력: 윤년을 확인할 년도 y
// 출력: 윤년이면 1, 아니면 0
int is_yun_year(int y)
{
	return (((y % 4) == 0) && ((y % 100 != 0)) || ((y % 400) == 0));
}

int main()
{
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);

	int num = 0;
	// a * b * c를 한 값에서 1까지 빼주며 최소공배수를 구해준다.
	for (int i = a * b * c; i >= 1; i--)
	{
		if (i % a == 0 && i % b == 0 && i % c == 0) num = i;
	}

	// year = 정답 년도, month = 정답 월, day = 정답일, week = 정답 요일
	// 초기값은 2100년 1월 1일 금요일
	int year = 2100, month = 1, day = 1, week = 5;
	while (1)
	{

		// 만약 is_yun_year 함수에서 결과가 1이 나오면 윤년이란 뜻인데
		// M[2]가 2월 달 끝부분이므로 29로 바꾼다.
		if (is_yun_year(year))
			M[2] = 29;
		else
			M[2] = 28; // 윤년이 아니면 28로 둔다.
		if (num >= M[month]) // 만약 현재 달의 마지막 날을 넘은 상황
		{
			num -= M[month]; // num에 달 수를 뺸다.
			week += M[month]; // 요일에 지난 달 수를 더해준다.
			week %= 7; // week를 7로 나눈 값의 나머지를 저장하여 요일값으로 업데이트한다.
			month++; // 달을 하나 올린다.
			if (month == 13) // 만약 month가 13이면 년도를 올려줘야 하므로
			{
				year++; // 년도를 올려주고
				month = 1; // 달을 1로 바꿔준다.
			}
		}
		else break; //num가 M[month]를 넘지 않으면 이 반복문을 나간다.
	}
	// week와 num을 더한 값에 7로 나눈 값의 나머지를 저장시키며 요일을 구해준다.
	week = (week + num) % 7;

	// 년도는 4칸에 맞춰서 출력하고
	// 월과 일은 2칸에 맞춰 출력한다.
	// 요일은 요일들이 있는 배열 W에서 골라 출력해준다.
	printf("%04d-%02d-%02d %s", year, month, day + num, W[week]);
}

'SFPC > 2021' 카테고리의 다른 글

2021 SFPC pB1 ver.2  (0) 2023.02.15
2021 SFPC E0  (0) 2023.02.14
2021 SFPC D0  (0) 2023.02.11
2021 SFPC D1  (0) 2023.02.11
2021 SFPC C2  (0) 2023.02.10
2021 SFPC C1  (0) 2023.02.10

#include <stdio.h>

int main()
{
    printf("8");
}

'SFPC > 2021' 카테고리의 다른 글

2021 SFPC pB1 ver.2  (0) 2023.02.15
2021 SFPC E0  (0) 2023.02.14
2021 SFPC E1  (0) 2023.02.14
2021 SFPC D1  (0) 2023.02.11
2021 SFPC C2  (0) 2023.02.10
2021 SFPC C1  (0) 2023.02.10
#include <stdio.h>

// 입력 : d(소수값을 확인하는 정수)
// 출력 : d가 소수이면 1, 아니면 0
int is_prime(int d)
{
    // i = 약수
    for (int i = 2; i < d; i++)
    {
        // 만약 d % i를 했는데 0이 나오면 i가 약수이므로 d는 소수가 아니니
        // 0을 리턴한다.
        if (d % i == 0) return 0;
    }
    // 2부터 d - 1까지 약수가 하나도 없다면 1을 리턴한다.
    return 1;
}

int main()
{
    long long n;

    scanf("%lld", &n);
    // a = 오늘 칭찬 스티커를 받은 학생 수
    // b = 지금까지 칭찬 스티커를 받은 학생 수
    long long a = 1, b = 1;

    // 3월 1일부터 스티커를 주기 시작하므로
    // month를 3, days를 1로 설정한다.
    int month = 3;
    int days = 1;
    // count에는 며칠이 걸리는지 저장하므로 1로 정해준다.
    int count = 1;
    while (1)
    {
        // 종료 조건 : 칭찬 스티커를 n 이상 받았을 경우
        if (b >= n)
        {
            printf("%d", count);
            return 0;
        }

        // days를 1 만큼 늘려서 시간이 갔음을 표현하고
        // count를 1 만큼 늘려 정답을 만든다.
        days++;
        count++;
        // 가장 큰 테스트 케이스의 정답이 4월 달 안에서 끝났으므로(n = 1e17일 떄 49일 걸림)
        // 3월 31 다음인 4월 1일로 설정
        if (days > 31)
        {
            // month를 1 올려 다음 달로 넘어가고
            // days를 1로 하여 다음달의 시작점을 저장시킨다.
            month++;
            days = 1;
        }
        // 칭찬 스티커 배급
        if (is_prime(days))
        {
            // days가 소수이므로 3을 곱해준다.
            a *= 3;
            // b에 a를 누적한다.
            b += a;
        }
        else
        {
            // days가 소수가 아니므로 2를 곱해준다.
            a *= 2;
            // b에 a를 누적한다.
            b += a;
        }
    }
}

'SFPC > 2021' 카테고리의 다른 글

2021 SFPC E0  (0) 2023.02.14
2021 SFPC E1  (0) 2023.02.14
2021 SFPC D0  (0) 2023.02.11
2021 SFPC C2  (0) 2023.02.10
2021 SFPC C1  (0) 2023.02.10
2021 SFPC C0  (0) 2023.02.10
#include <stdio.h>


int main()
{
	int p[3004] = { 0 };
	int n, m, a, b, c = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) scanf("%d", &p[i]);
	scanf("%d %d", &a, &b);

	// a번쨰 수부터 b번쨰 수까지의 합 저장
	for (int i = a - 1; i < b; i++) c += p[i];

	// count에 연속 부분 수열 개수를 저장
	int count = 0;

	// i: 연속 부분 수열의 시작 위치
	for (int i = 0; i < n; i++)
	{
		// ans 변수에 값을 누적하여 출력 여부를 결정한다.
		int ans = 0;

		// j: 연속 부분 수열의 끝 위치
		for (int j = i; j < n; j++)
		{
			// ans에 값을 누적한다.
			ans += p[j];

			// 연속 부분 수열 a[i..j]의 합이 n과 같음
			if (ans == c)
			{
				// 연속 부분 수열의 개수 저장
				count++;

				// C1에서는 양수만 봐서 break를 하면 되지만
				// C2에서는 음수까지 봐서 뒤에 값들에 정답이 있을 수 있으므로
				// break를 안해준다.
                // 예시 입력: p = { 0, 1, -1 }, a = 1, b = 1 일 때
                // break를 안하면 정답 3이 나오지만
                // break를 추가하면 오답 2가 나온다.
			}
		}
	}
	// 정답 출력
	printf("%d", count);
}

'SFPC > 2021' 카테고리의 다른 글

2021 SFPC E1  (0) 2023.02.14
2021 SFPC D0  (0) 2023.02.11
2021 SFPC D1  (0) 2023.02.11
2021 SFPC C1  (0) 2023.02.10
2021 SFPC C0  (0) 2023.02.10
2021 SFPC B0  (0) 2023.02.09

+ Recent posts