🤯 코딩테스트/C/C++
[it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비] 코드구현력 기르기 - 자릿수의 합
kangkibong
2022. 8. 22. 18:36
문제
N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 각 자연수의 자릿수의 합을 구하는 함수를 int digit_sum(int x)를 꼭 작성해서 프로그래밍 하세요.
💡 입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 10,000,000를 넘지 않는다.
💡 출력설명
자릿수의 합이 최대인 자연수를 출력한다. 자리수의 합이 최대인 자연수가 여러개인 경우 그 중 값이 가장 큰 값을 출력합니다.
💡 입력예제
5
125 15232 79 1325 97
💡 출력예제
97
코드
첫 번째 풀이
#include <stdio.h>
int digit_sum(int x) {
int num = x, sum = 0;
while(num > 0) {
sum += num % 10;
num = num / 10;
}
return sum;
}
int main() {
int n, i, input, max = -2147000000;
int res[101];
int sum[101];
int qwer[101];
scanf("%d", &n);
for(i = 0; i < n; i++) {
scanf("%d", &input);
res[i] = input;
sum[i] = digit_sum(input);
}
// 각자리합의 최대값 구하기
for(i = 0; i < n; i++) {
if(sum[i] > max) {
max = sum[i];
}
}
// 각자리합의 최대값과 같은 입력값 qwer배열에 할당
int j = 0;
for(i = 0; i < n; i++) {
if(sum[i] == max) {
qwer[j] = res[i];
j++;
}
}
// 입력값중에 가장 큰 값 a에할당
int a = qwer[0];
for(i = 1; i < j; i++) {
if(qwer[i] > a) {
a = qwer[i];
}
}
printf("%d", a);
return 0;
}
최종 풀이
#include <stdio.h>
int digit_sum(int x) {
int num = x, sum = 0;
while(num > 0) {
sum += num % 10;
num = num / 10;
}
return sum;
}
int main() {
int n, i, num, sum = 0, res, max = -2147000000;
scanf("%d", &n);
for(i = 0; i < n; i++) {
scanf("%d", &num);
sum = digit_sum(num);
if(sum > max) {
max = sum;
res = num;
} else if(sum == max) {
if(num > res) {
res = num;
}
}
}
printf("%d", res);
return 0;
}
설명
사용자로부터 n번 입력받고 n번 반복하는 for문을 작성한다.
n번 자연수를 입력받고 해당 num을 digit_sum함수에 인자로 할당한다.
digit_sum함수는 입력받은 n이 0보다 클 때 반복되는 while문을 작성하고 num을 10으로 나눈 나머지값을 sum에 더해나가고 몫은 num에 할당해나간다. 마지막으로 while문이 끝나면 해당 sum을 return한다.
return한 sum을 main의 sum에 할당하고 해당 sum이 max보다 클 경우 max에 sum을 할당하고 res에는 각 자리수의 합이 최대값에 해당하는 num을 할당한다. 만약 sum과 max가 같을 경우 res보다 큰 num을 res에 다시 할당하고 최종적으로 res를 출력하도록 한다.
배운 점
1. 사용자로부터 입력에 대한 최대값을 따로 구하고 최대값과 같은 입력값을 새로운 배열에 할당하였지만 새로운 배열을 만들지 않고도 새로운 변수만으도 반복문을 줄일 수 있다는 것을 알게되었다.
2. int 배열은 마지막 index에 NULL이 할당되지 않는다.
해당 내용은 김태원님의 'it 취업을 위한 알고리즘 문제풀이' 강의를 듣고 작성한 글입니다.