Notice
Recent Posts
Link
정화 코딩
EC.crew (3기) 4주차 정기 모임 본문
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