티스토리 뷰

https://www.acmicpc.net/problem/15898

 

15898번: 피아의 아틀리에 ~신비한 대회의 연금술사~

"피아의 아틀리에 ~신비한 대회의 연금술사~"는 가난한 연금술사 피아의 성장스토리를 담은 게임이다. 이 게임의 가장 중요한 부분은 "대회"인데, 연금술로 높은 품질의 물건을 만들어 상금을 타

www.acmicpc.net

 

 

Node로 푼 게 시간초과로 정답이 인정되지 않아서 C로 풀었다.  전에 코틀린 한다고 좀 까불었는데, 

코틀린으로 푼다고 풀릴지 의문이라 일단 C로 풀었다.

C로 문제를 푼 게 정말 오랜만이라  문법이 하나도 기억이 안 나서 구조체부터 다시 찾아보면서 풀었다. 

 

 

코드는 엄청 구리다ㅋ 

 

#include <stdio.h>

typedef struct item
{
	char color;
	int num;
} Item;


int main(){
	int N;
	scanf("%d",&N);
	int dx[4] ={0,0,1,1};
	int dy[4] ={0,1,0,1};
	int u;
	int v;
	int result = 0;
	int max = 0;
	int R = 0;
	int B = 0;
	int Y = 0;
	int G = 0;
	int W = 0;
	Item arr[N][4][4][4];
	
	Item pot[5][5];
	for(int n = 0; n<N; n++){
		for(int i = 0; i<4; i++){
				scanf("%d %d %d %d", &arr[n][0][i][0].num, &arr[n][0][i][1].num, &arr[n][0][i][2].num, &arr[n][0][i][3].num);
		}
		
		
		for(int i = 0; i<4; i++){
			scanf("\n%c %c %c %c", &arr[n][0][i][0].color, &arr[n][0][i][1].color, &arr[n][0][i][2].color, &arr[n][0][i][3].color);
			//printf("%c %c %c %c \n", arr[n][0][i][0].color, arr[n][0][i][1].color, arr[n][0][i][2].color, arr[n][0][i][3].color);
		}
	}

	
	
	for(int n = 0; n<N; n++){	
			for(int i = 0; i<4; i++){
				for(int j = 0; j<4; j++){
					arr[n][1][j][3-i]=arr[n][0][i][j];
					arr[n][2][3-i][3-j] = arr[n][0][i][j];
					arr[n][3][3-j][i]=arr[n][0][i][j];
				}
			}	
	}
	
	for(int i = 0; i<N; i++){
		for(int j = 0; j<N; j++){
			if(j==i) continue;
			for(int k= 0; k<N; k++){
				if(k==i || k==j) continue;
				for(int x = 0; x<4; x++){
					for(int y = 0; y<4; y++){
						for(int z= 0; z<4; z++){
							for(int a = 0; a<4; a++){
								for(int b = 0; b<4; b++){
									for(int c= 0; c<4; c++){
										
										 for(int p=0; p<5; p++){
										 	for(int q = 0; q<5; q++){
										 		pot[p][q].color= 'W';
										 		pot[p][q].num = 0; 
											 }
										 }
										 // 첫번째 더하기
										 u = dx[a];
										 v = dy[a];
										 
										 for(int p = 0; p<4; p++){
										 	for(int q = 0; q<4; q++){
										 		pot[p+u][q+v].num = pot[p+u][q+v].num +  arr[i][x][p][q].num;
										 		if(arr[i][x][p][q].color != 'W') pot[p+u][q+v].color = arr[i][x][p][q].color;
										 		if(pot[p+u][q+v].num<0) pot[p+u][q+v].num = 0;
										 		else if(pot[p+u][q+v].num>9) pot[p+u][q+v].num = 9;
											 }
										 }
										 
										 u = dx[b];
										 v = dy[b];
										 for(int p = 0; p<4; p++){
										 	for(int q = 0; q<4; q++){
										 		pot[p+u][q+v].num  = pot[p+u][q+v].num +  arr[j][y][p][q].num;
										 		if(arr[j][y][p][q].color != 'W') pot[p+u][q+v].color = arr[j][y][p][q].color;
										 		if(pot[p+u][q+v].num<0) pot[p+u][q+v].num = 0;
										 		else if(pot[p+u][q+v].num>9) pot[p+u][q+v].num = 9;
											 }
										 }
										 u = dx[c];
										 v = dy[c];
										 
										 for(int p = 0; p<4; p++){
										 	for(int q = 0; q<4; q++){
										 		pot[p+u][q+v].num = pot[p+u][q+v].num + arr[k][z][p][q].num;
										 		if(arr[k][z][p][q].color != 'W') pot[p+u][q+v].color = arr[k][z][p][q].color;
										 		if(pot[p+u][q+v].num<0) pot[p+u][q+v].num = 0;
										 		else if(pot[p+u][q+v].num>9) pot[p+u][q+v].num = 9;
											 }
										 }
										  
										 R = 0;
										 B = 0;
										 Y = 0;
										 G = 0;
										 W = 0;
										 
										 for(int p = 0; p<5; p++){
										 	for(int q = 0; q<5; q++){
//										 		printf("%c",pot[p][q].color);
										 		switch(pot[p][q].color){
										 			case 'R': R+=pot[p][q].num; break;
										 			case 'B': B+=pot[p][q].num; break;
										 			case 'Y': Y+=pot[p][q].num; break;
										 			case 'G': G+=pot[p][q].num; break;
										 			case 'W': W+=pot[p][q].num; break;
										 			default: break;
												 }
											 }
										 }
										 
										 result = 0;
										 
										 result = R*7 + B*5 + G*3 + Y*2;
//										 printf("%d %d %d %d %d %d\n",R,B,G,Y,W,result);
										 if(result>max) max = result;
									}
								}
							}			
						}
					}
				}			
			}
		}
	}
	
	
	
	
	
	printf("%d",max);
	return 0;
}
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함