첫번째 나의 삽질: 배열 두 개를 이용하여 자연수, 자릿수합을 구하려고 했다
그러나, 답이 자꾸 나오지 않는다..
#include <stdio.h>
int main(void){
freopen("input.txt", "rt", stdin);
// 1. 자연수를 입력 받는다.
int n = 0;
scanf("%d", &n);
int array[n];
scanf("%d", &array);
// 2. 각 자릿수의 합을 구한다.
int sum[n] = {0,};
int max = 0;
for( int i = 0; i < n; i++){
int a = 0;
for( int j = 8; j = 0; j--){
sum[i] = sum[i] + a / 10^j;
a = array[i] % 10^j;
}
}
printf("%d", sum[5]);
/*
// 3. n개의 자릿수 합들을 비교하여 큰 값을 출력한다.
for(int i = 1; i <= n; i++){
if( sum[i] > sum[i-1]) {
max = array[i];
}
}
printf("%d", max);
*/
}
배열을 쓰지 않고 짜보기로 했다.
또 문제에서 주어진대로 함수를 만들어보자
#include <stdio.h>
int tmp, sum = 0;
int digit_sum(int x){
while(x > 0){
tmp = x;
sum = sum + tmp % 10;
x = tmp / 10;
}
return sum;
}
int main(void){
//freopen("input.txt", "rt", stdin);
// 1. 자연수를 입력 받는다.
int n, num = 0;
int result = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", &num);
// 2. 각 자릿수의 합을 구한다.
int sum = digit_sum(n);
// 3. n개의 자릿수 합들을 비교하여 큰 값을 출력한다.
int max = -2147000000;
if(sum > max){
max = sum;
result = num;
}
// 자릿수 합이 같을 때 큰 값을 출력한다.
else if(sum == max){
if(num > result) result = num;
}
}
printf("%d", result);
}
채점 결과
잘못된 함수 구현
int tmp, sum = 0;
int digit_sum(int x){
while(x > 0){
tmp = x;
sum = sum + tmp % 10;
x = tmp / 10;
}
return sum;
}
125의 각 자릿수 합을 구한다고 했을 때
tmp | 125 | 12 | 1 |
result | 5 | 5 + 2 | 5 + 2 + 1 |
5 → 2 → 1 역순으로 자릿수를 더한다고 보면 된다.
옳은 함수 구현
int digit_sum(int x){
int tmp, sum = 0;
while(x > 0){
tmp = x % 10;
sum = sum + tmp;
x = x / 10;
}
return sum;
}
함수 안에서! tmp, sum = 0으로 초기화해주자
tmp = x;
sum = sum + tmp % 10;
x = tmp / 10;
이 세 줄로 바꾸어도 상관없다.
sum += tmp; 로 간략하게 써줘도 된다.
해답 및 최종 구현
#include <stdio.h>
int digit_sum(int x){
int tmp, sum = 0;
while(x > 0){
tmp = x % 10;
sum = sum + tmp;
x = x / 10;
}
return sum;
}
int main(void){
//freopen("input.txt", "rt", stdin);
// 1. 자연수를 입력 받는다.
int n, num = 0;
int sum, result = 0;
int max = -2147000000;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", &num);
// 2. 각 자릿수의 합을 구한다.
sum = digit_sum(num);
// 3. n개의 자릿수 합들을 비교하여 큰 값을 출력한다.
if(sum > max){
max = sum;
result = num;
}
// 자릿수 합이 같을 때 큰 값을 출력한다.
else if(sum == max){
if(num > result) result = num;
}
}
printf("%d\n", result);
}
'Programming Language > C C++' 카테고리의 다른 글
[알고리즘 문제풀이] 12. 숫자의 총 개수(large: 제한시간 1초)★★ (0) | 2022.01.06 |
---|---|
[알고리즘 문제풀이] 11. 숫자의 총 개수(small)★ (0) | 2022.01.06 |
[알고리즘 문제풀이] 9. 모두의 약수(제한시간 1초)★ (0) | 2022.01.05 |
[알고리즘 문제풀이] 8. 올바른 괄호 (0) | 2022.01.05 |
[알고리즘 문제풀이] 7. 영어단어 복구★ (0) | 2022.01.05 |