반응형
백준 2477번이자 한국 정보 올림피아드 2010년도 기출 문제 풀이입니다.
#include <stdio.h>
int main (void){
int melons_per_square_meter,esnw[7][2]={0};
int length[7],multiple=1,to_sub=1;
/**1 제곱미터당 참외 개수 입력 받기**/
scanf("%d",&melons_per_square_meter);
/**입력받기**/
for (int i=0;i<6;i++)
{
scanf("%d %d",&esnw[i][0],&length[i]);
}
/**큰 직사각형의 성분이면 0, 아니면 1 저장해주기**/
for(int i=0;i<6;i++)
{
for(int j=i+1;j<6;j++)
{
if(esnw[i][0]==esnw[j][0])
{
esnw[i][1]=1; esnw[j][1]=1;
}
}
}
/**작은 직사각형의 조건: 전후의 변이 큰 직사각형의 성분이 아니여야함. ->배열 값 세 개 연달아 1**/
for(int i=0;i<6;i++)
{
if(esnw[i][1]==1&&esnw[(i+5)%6][1]==1&&esnw[(i+1)%6][1]==1)
to_sub*=length[i];
if(esnw[i][1]==0)
multiple*=length[i];
}
int ans= (multiple-to_sub)*melons_per_square_meter;
printf("%d",ans);
}
이 문제의 핵심 아이디어는 너무도 간단하다.
큰 직사각형- 작은 직사각형을 하는 것이다.
1. 큰 직사각형 찾는 방법
큰 직사각형의 양변은 변의 방향이 한 번만 나온다.두 번 나오면 esnw[][i]배열을 1로 바꿔준다.
esnw[][i]=0인 값들을 곱해주면 큰 직사각형이 나온다.
2. 작은 직사각형 찾기
작은 직사각형의 양변은 자기 자신 전의 변과 다음 변 모두가 큰 직사각형의 변이 아니어야 한다.
if(esnw[i][1]==1&&esnw[(i+5)%6][1]==1&&esnw[(i+1)%6][1]==1)
to_sub*=length[i];
다음이 구현한 코드이다.
나누기를 해주어야 하는 것이 특징이다.(원형 큐와 동일한 아이디어)
이를 구현하였으면 큰 직사각형에서 작은 직사각형을 제외해주면 된다.
반응형
'백준 문제풀이' 카테고리의 다른 글
[C]늑대와 양 16956 문제 풀이 (0) | 2023.08.01 |
---|---|
(C)백준 1244번 스위치 켜고 끄기 (0) | 2023.06.28 |
(C)백준 1002번 터렛 풀이 (0) | 2023.06.28 |
(C)백준 11332번 시간초과 C언어 풀이 (0) | 2023.06.24 |
방학동안 백준 하루 1솔 가보겟습니다. (0) | 2023.06.23 |