1225번 : 이상한 곱셈
새롭게 정의된 곱셈 연산을 수행하여 출력하는 문제입니다.
수의 크기 제한이 10000자리 이하라고 하였으므로, long long int 범위를 벗어나기 때문에 문자열로 처리해주어야 합니다.
두 수가 모두 10000자리이고, 각 자릿수가 모두 9인 경우, 9 * 9 * 10000 * 10000을 계산해보면 81억으로 int 형의 범위를 벗어나기 때문에 long long int를 사용하여 작성해야 합니다.
#include<stdio.h>
#include<string.h>
int main() {
long long int n = 0;
char a[10001], b[10001];
scanf("%s %s", a, b);
for(int i=0; i<strlen(a); i++)
for(int j=0; j<strlen(b); j++)
n += (a[i] - '0') * (b[j] - '0');
printf("%lld", n);
}
우선 10000자리의 문자열을 다루기 위해서는 string.h를 선언해주는 것이 간편합니다. (strlen 이용 때문)
그 다음 각 자릿수의 곱을 구할 때 각 자릿수에서 '0'만큼의 값을 빼줘야 아스키코드를 숫자에 해당하는 값으로 변형시켜줄 수 있습니다.
나머지는 반복문의 설계와 연산만 하면 되는 부분이라 간단합니다.
1233번 : 주사위
세 주사위의 눈을 입력받았을 때, 눈의 합의 빈도가 가장 높은 합을 출력하는 문제입니다.
#include<stdio.h>
int main() {
int s1, s2, s3, sum[100] = {0, }, max = 0, ans;
scanf("%d %d %d", &s1, &s2, &s3);
for(int i=1; i<=s1; i++)
for(int j=1; j<=s2; j++)
for(int k=1; k<=s3; k++) sum[i+j+k]++;
for(int i=3; i<=s1+s2+s3; i++)
if(sum[i] > max) {
max = sum[i];
ans = i;
}
printf("%d", ans);
}
입력 범위가 20, 20, 40까지로 아주 작으므로, 삼중 for문을 사용해도 문제 없습니다.
일일이 확인하여 sum 배열에 각 합이 나오는 경우의 수가 몇 개씩 존재하는지 기록합니다.
마지막에 경우의 수가 가장 많은 합을 출력할 때, 합이 아닌 경우의 수를 출력하지 않도록 주의해야 합니다.
sum의 최솟값은 0이고 반드시 0보다 큰 경우의 수가 존재하므로 max는 0으로 두어도 무방합니다.
1264번 : 모음의 개수
영문 문장을 입력받았을 때 모음(a, e, i, o, u)의 수를 count하여 그 수를 출력하는 문제입니다.
이 때 모음은 대문자일 수도 있으므로 조심하도록 합니다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
int count;
while(1) {
getline(cin, str);
if(str[0] == '#') return 0;
count = 0;
for(int i=0; i<str.length(); i++)
if(str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u' ||
str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U') count++;
printf("%d\n", count);
}
}
(수정) 원래 C++에만 존재하는 라이브러리와 함수는 일체 사용하지 않고 풀이하려 했는데, 이 문제에서 gets 함수와 정규표현식이 모두 제대로 인식되지 않아 부득이하게 C++ 소스코드로 대체하였습니다.
Baekjoon Online Judge에서 왜 gets 함수를 허용하지 않았는지 아시는 분들은 알려주시면 감사하겠습니다.
while문을 통해 문자열이 #인지 아닌지를 검사하고 아닐 경우에는 문자열의 첫 문자부터 마지막 문자까지 일일이 검사하여 모음이 몇 개인지 count 해주면 됩니다.
다만 개발 환경에서는 잘 돌아가는데 online judge 사이트에 제출할 때만 채점 결과가 다르게 나오는 경우가 있는데, 그럴 때는 주로 scanf 쪽에서 문제가 많이 발생하니 다른 방법으로 해결하기를 권장합니다.