http://gall.dcinside.com/board/view/?id=programming&no=530510&page=2
자바 버젼 :
import java.util.Scanner;
public class DCProgramingalley1 {
public static void main(String[] args) {
int a,b,c,d=0;
Scanner s=new Scanner(System.in);
a=s.nextInt();
int []f=new int[a];
for(int i=0;i<a;i++){
b=s.nextInt();
for(int j=0;j<b;j++){
c=s.nextInt();
if(c>3)
d+=3;
else
d+=c;
if((j+1)%6==0 && d>16*((j+1)/6))
d=16;
}
f[i]=d;
d=0;
}
for(int i=0;i<a;i++){
System.out.println(f[i]);
}
s.close();
}
}
C언어 버젼 :
#include<stdio.h>
#include<stdlib.h>
main()
{
int a, b, c, d=0;
scanf("%d",&a);
int *f = (int*) malloc(sizeof(int) * a);
for (int i = 0; i<a; i++) {
scanf("%d", &b);
for (int j = 0; j<b; j++) {
scanf("%d", &c);
if (c>3)
d += 3;
else
d += c;
if ((j + 1) % 6 == 0 && d>16 * ((j + 1) / 6))
d = 16;
}
f[i] = d;
d = 0;
}
for (int i = 0; i<a; i++) {
printf("%d\n", f[i]);
}
system("pause");
}
혹시 몰라 여기에도 답변을 답니다
오답입니다 중요하게 생각해야 될게 이건 동적프로그래밍 문제이고 최소비용을 뽑아내야합니다
예를 들어 입력이 2 9 1 1 3 3 3 3 3 2 1 2 2 4 이렇게 들어갔을때 출력은 18 5 가 나와야 합니다
님의 코드는 20 5 가 나옵니다 왜냐하면 1주일권을 발행하는 날짜를 처음으로 고정시켰기 때문이죠. 1주일이용권은 둘째날 살수도 있고 셋째 날에 살 수도 있으니까 모든 경우를 다 따져야합니다
꼬잉님 글이 삭제되어서 메일을 못썻는데 ㅠㅠ