( ) - 3

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

문제> 예시처럼 정수 n(1 <= n <= 100,000)과 n개의 정수(-1,000보다 크거나 같고, 1,000보다

작거나 같은 정수)로 이루어진 임의의 수열이 공백으로 구분되어 입력으로 주어지고, 이


중 연속된 몇 개의 수를 선택하여 구할 수 있는 합 중 가장 큰 합을 구하여 그 합을 출력
하는 코드를 완성하시오(단, 답은 답안에 작성하시오.).

입력

10

10 -4 3 1 5 6 -35 12 21 –1

출력
33

#include <stdio.h>
int a[100000], dp[100000]; // dp[i] 배열은 연속된 i번째 배열까지의 최댓값
int main()
{
int n, i, ret;
scanf("%d", &n);
scanf("%d", &a[0]);
for (i = 1; i < n; i++) scanf("%d", &a[i]);

dp[0] = .......

ret = ....... ret는 합 중에서 최댓값

for (i = 1; i < n; i++)


{
if (....... ) dp[i] = a[i];
else .......

.......
}
printf("%d", ret);

return 0;
}
#include <stdio.h>
int a[100000], dp[100000]; // dp[i] 배열은 연속된 i번째 배열까지의 최댓값
int main()
{
int n, i, ret;
scanf("%d", &n);
scanf("%d", &a[0]);
for (i = 1; i < n; i++) scanf("%d", &a[i]);

dp[0] = a[0]; //1

ret = dp[0]; //2 ret는 합 중에서 최댓값

for (i = 1; i < n; i++)


{
if (dp[i-1]+a[i]<a[i] ) dp[i] = a[i]; //3
else dp[i] = dp[i-1]+a[i]; //4

if(ret<dp[i]) ret = dp[i]; //5


}
printf("%d", ret);

return 0;
}
문제> 예시처럼 입력된 값 이하의 자연수 중에서 가장 많은 약수를 가지는 자연수와 약수의 개
수를 출력하는 코드를 완성하시오(단, 답은 답안에 작성하시오.).

입력

25

출력

24 8

#include <stdio.h>
int main()
{
int n, cnt, ansCount, ansNum, i, j;
ansCount = 0;
scanf("%d", &n);
i = 1;
while (i <= n)
{
j = 1;
cnt = 0;
while ( ...... )
{
......
......
}
if (cnt > ansCount)
{
......
......
}
i++;
}
printf("%d %d", ansNum, ansCount);
return 0;
}
#include <stdio.h>
int main()
{
int n, cnt, ansCount, ansNum, i, j;
ansCount = 0;
scanf("%d", &n);
i = 1;
while (i <= n)
{
j = 1;
cnt = 0;
while ( j<=i ) //1
{
if(i%j==0) cnt++; //2
j++; //3
}
if (cnt > ansCount)
{
ansCount = cnt; //4
ansNum = i; //5
}
i++;
}
printf("%d %d", ansNum, ansCount);
return 0;
}

You might also like