티스토리 뷰

int main() {
	int n,m,i,j,x=0;  //변수
	scanf("%d",&n);
	char d[2][n]; //삼각형의 상태를 저장하는 배열
	for(i=0;i<2;i++) { //삼각형의 상태 입력
		for(j=0;j<n;j++) {
			scanf("%d",&m);
			if(m) ++x;
			d[i][j]=m;
		}
	}
	//위 삼각형들 처리
	x=x*3;
	for(i=0;i<n;i++) {
		if(d[0][i]) { //검은색 삼각형일 때
			if(i>0 && d[0][i-1]) --x; //왼쪽
			if(i<n-1 && d[0][i+1]) --x; //오른쪽
			if(i&1); else {
				if(d[1][i]) --x; //짝수번, 아래삼각형이 검은색인가?
			}
		}
	}
    //아래 삼각형들 처리
	for(i=0;i<n;i++) {
		if(d[1][i]) { //검은색 삼각형일 때
			if(i>0 && d[1][i-1]) --x; //왼쪽
			if(i<n-1 && d[1][i+1]) --x; //오른쪽
			if(i&1); else {
				if(d[0][i]) --x; //짝수번, 위 삼각형이 검은색인가?
			}
		}
	} printf("%d",x); //노란색 모서리의 총합을 출력
}

 

풀이 : 기하학?

 

삼각형의 노란색 모서리의 개수 구하는 방법

 

0. 노란색 모서리의 총합 = 검은색 삼각형의 개수 * 3

1. 빨간색 짝수번의 삼각형은 최대 3개의 다른 삼각형과 접하고 있으며 빨간색 홀수번의 삼각형은 2개의 다른 삼각형과 접하고 있습니다.

2. 짝수번의 삼각형 아래 (파란색 0번줄 기준, 파란색 1번줄 기준은 위), 왼쪽 오른쪽에 검은색 삼각형이 있는지를 확인하고, 접하고 있는 검은 삼각형의 개수 만큼 노란색 모서리의 총합 에서 1씩 감소 시킵니다.

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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 29 30
글 보관함