Notice
Recent Posts
Link
정화 코딩
EC.crew (3기) 3주차 정기 모임 본문
1. 약수 (백준 1037번)
https://www.acmicpc.net/problem/1037
#C
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int div[n];
for(int i = 0; i < n; i++)
scanf("%d", &div[i]);
int min = div[0], max = div[0];
for(int i = 1; i < n; i++)
{
if(div[i] < min)
min = div[i];
if(div[i] > max)
max = div[i];
}
printf("%d\n", min * max);
return 0;
}
여러개의 약수 중 최솟값과 최댓값을 곱하면 원래의 수가 나온다! (정답)
2. 좌표 정렬하기 (백준 11650번)
https://www.acmicpc.net/problem/11650
(미해결)
3. 소트인사이드 (백준 1427번)
https://www.acmicpc.net/problem/1427
#C
#include <stdio.h>
#include <string.h>
void insertSort(int A[], int n) // 내림차순
{
int i, j, key;
for (i = 1; i < n; i++)
{
key = A[i];
for (j = i-1; j >= 0 && key > A[j]; j--)
A[j+1] = A[j];
A[j+1] = key;
}
}
int main()
{
char str[12]; // 11로 하면 숫자 10개인 경우에서 오답
int num[12];
fgets(str, sizeof(str), stdin);
int length = strlen(str) - 1;
for(int i = 0; i < length; i++)
num[i] = (int) str[i] - '0';
insertSort(num, length);
for(int i = 0; i < length; i++)
printf("%d", num[i]);
return 0;
}
입력은 문자열로 받고 문자열의 문자 하나하나를 숫자로 변환해서 배열로 저장해두었다. 이 때, 처음에는 문자열의 길이를 11로 하니까 자리수가 10개인 경우에 9개만 출력되었다. (오답) 왜인가 했더니 아마도 엔터까지 생각해주어야 되기 때문인 것 같다. 아무튼 10자리+엔터+널문자 이렇게 길이는 12로 선언하니 정상적으로 실행되었다. (정답)
4. 팀 이름 정하기 (백준 1296번)
https://www.acmicpc.net/problem/1296
#C
#include <stdio.h>
#include <string.h>
int main()
{
char name[22];
int nameL = 0, nameO = 0, nameV = 0, nameE = 0;
scanf("%s", name);
for(int i = 0; i < 20; i++)
{
if(name[i] == 'L')
nameL++;
if(name[i] == 'O')
nameO++;
if(name[i] == 'V')
nameV++;
if(name[i] == 'E')
nameE++;
}
int n;
scanf("%d", &n);
char team[n][22];
int teamL[n], teamO[n], teamV[n], teamE[n];
for(int i = 0; i < n; i++)
{
scanf("%s", team[i]);
teamL[i] = nameL;
teamO[i] = nameO;
teamV[i] = nameV;
teamE[i] = nameE;
}
for(int j = 0; j < n; j++)
for(int i = 0; i < 20; i++)
{
if(team[j][i] == 'L')
teamL[j]++;
else if(team[j][i] == 'O')
teamO[j]++;
else if(team[j][i] == 'V')
teamV[j]++;
else if(team[j][i] == 'E')
teamE[j]++;
else if(team[j][i] == '\0')
break;
}
int win[n];
for(int i = 0; i < n; i++)
win[i] = ((teamL[i]+teamO[i])*(teamL[i]+teamV[i])*(teamL[i]+teamE[i])
*(teamO[i]+teamV[i])*(teamO[i]+teamE[i])*(teamV[i]+teamE[i])) % 100;
int maxindex = 0;
for(int i = 0; i < n; i++)
if(win[i] > win[maxindex])
maxindex = i;
else if(win[i] == win[maxindex] && strcmp(team[i], team[maxindex]) < 0)
maxindex = i;
printf("%s\n", team[maxindex]);
return 0;
}
변수가 많아서 살짝 복잡하고 헷갈렸던 문제. 팀의 이름별로 우승 확률을 구하고 가장 높은 확률의 팀 이름을 출력하는 것까지는 어찌저찌 구현했다. 문제는 그 다음이었는데, 확률이 같은 경우에 사전 순으로 앞서는 팀 이름을 출력하는 것을 어떻게 해야할지 감이 안 잡혔다. 역시나 오늘도 오빠가 도와줬다. 그냥 같은 경우일 때 &&으로 문자열을 비교하는 함수인 strcmp의 조건만 추가하면 되는 거였다. 생각보다 간단... (정답)
'Group > EC.crew' 카테고리의 다른 글
EC.crew (3기) 4주차 정기 모임 (0) | 2023.01.25 |
---|---|
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