정화 코딩

EC.crew (3기) 4주차 정기 모임 본문

Group/EC.crew

EC.crew (3기) 4주차 정기 모임

jungh150c 2023. 1. 25. 18:53

1. 잃어버린 괄호 (백준 1541번)

 

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

 

//C
#include <stdio.h>

int main()
{
    char str[60];
    int num[30];
    char oper[30];

    scanf("%s", &str);

    return 0;
}
//C
// 이건 토큰 분리 말고 다른 방식으로 입력 받는 방법 중 하나!
// 파일이 끝날 때까지 정수를 입력받고, 정수를 입력받으면 부호까지 같이 들어오니까 바꿔줘야 하는데
// 바꿔줄 때 문자열에 +, -도 넣어주기!
// (오빠가 알려준 방법.. ㅎ)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <limits.h>

// 문자열 토큰 분리 (문자열 처리 라이브러리 예제)

#define N 100

int i[50];

int main()
{
    for (int j = 0; ; j++) {
        if (scanf("%d", i+j) == EOF) {
            i[j] = INT_MAX;
            break;
        } else {
            if (i[j] < 0) {
                i[j] = -i[j];
                // 여기에서 문자열에 + 또는 - 추가하면 될듯!
            }
        }
    }
    
    char str[N];
    char seps[] = "+-";
    char *token;
    
    fgets(str, sizeof(str), stdin);
    
    token = strtok(str, seps);  // 첫번째 단어 자름.
    
    while(token != NULL)
    {
        puts(token);
        token = strtok(NULL, seps);  // 잘려진 위치를 기준으로 뒷부분 중에서 분리자로 또 자름.
    }
    
    return 0;
}

 

(미해결)

 


 

2. 설탕 배달 (백준 2839번)

 

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

 

//C
#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);

    int nby5 = n / 5, nby3 = 0;
    int num5, num3;
    int possible = 0;

    for (int i = nby5; i >= 0; i--)
    {
        nby3 = n - 5*i;

        if (nby3 % 3 == 0)
        {
            possible = 1;
            num5 = i;
            num3 = nby3 / 3;
            break;
        }
    }

    if (possible == 1)
    {
        printf("%d\n", num5 + num3);
        return 0;
    }
    else
    {
        printf("-1\n");
        return 0;
    }

    return 0;
}

 

n을 5로 나눈 몫을 nby5에 저장한다. (n - 5*i)가 3으로 나누어 떨어지는지 확인하는 과정을 i를 nby5부터 하나씩 줄여가면서 반복한다. i가 클 때부터 줄여가면서 반복하는 이유는, 그렇게 해야 봉지의 수가 최소인 경우이기 때문이다. 나누어 떨어지면 그 때 5kg짜리 봉지의 수와 3kg짜리 봉지의 수를 합하여 출력하면 된다. 다 돌아도 그런 경우가 없다면 정확하게 n을 만들 수가 없다는 뜻이므로 -1을 출력한다. (정답)

 


 

3. ATM (백준 11399번)

 

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

 

//C
#include <stdio.h>
#include <stdlib.h>

int compare(const void* _elem1, const void* _elem2)
{
	int* elem1 = (int*)_elem1;
	int* elem2 = (int*)_elem2;

	if (*elem1 > *elem2)
		return 1;
	else if (*elem1 < *elem2)
		return -1;
	else
		return 0;
}

int main()
{
    int n, p[1000];
    long long sum = 0;
    scanf("%d", &n);

    for (int i = 0; i < n; i++)
        scanf("%d", &p[i]);

    qsort((void*)p, n, sizeof(int), compare);

    for (int i = 0; i < n; i++)
        sum += (n-i) * p[i];
    
    printf("%lld\n", sum);

    return 0;
}

 

처음에는 sum의 자료형을 int로 둬서 틀렸다. (오답) sum은 n이 1000이고 모든 p가 1000일 때 int가 표현할 수 있는 범위를 넘어갈 수 있으므로, int보다 더 큰 수를 표현할 수 있는 자료형인 long long을 써야한다. 자주하는 실수... 범위 잘 보자. 그리고 long long의 형식지정자는 lld이다! (정답)

 

'Group > EC.crew' 카테고리의 다른 글

EC.crew (3기) 3주차 정기 모임  (1) 2023.01.18
EC.crew (3기) 2주차 정기 모임  (0) 2023.01.11
EC.crew (3기) 1주차 정기 모임  (0) 2023.01.04
EC.crew (2기) 8주차 정기 모임  (3) 2022.11.17
EC.crew (2기) 4주차 정기 모임  (0) 2022.09.29
Comments