일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 정보과학
- C
- 정보올림피아드
- 다중반복문
- IT
- Backdoor
- 독서 감상문
- 영재교육원
- 리눅스
- Linux
- For문
- C++
- 알고리즘
- c언어
- 제어문
- 정보영재원
- 풀이&소스코드저작권:왕유승
- API
- 문제출저:www.dovelet.com
- 프로그래밍
- if문
- 리눅스 명령어
- DBMS
- 참조은요양병원
- 반복문
- 수학영재원
- 자료구조
- 독후감
- 백도어
- 배열
- Today
- Total
되는대로 살자
[C언어 기출문제&풀이] 동맹휴업(Hartal) 본문
방글라데시의 정당들은 자신의 세를 과시하기 위해 정기적인 동맹휴업(파업)을 추진하는데, 이 동맹 휴업은 경제에 상당한 피해를 끼칠 수 있다. 이 문제에서는 각 당을 동맹 휴업 지수(hartal parameter)라고 부르는h라는 양의 정수로 나타낼 수 있다고 하자. 이 동맹 휴업지수는 한 동맹 휴업과 다음 동맹 휴업 사이의 기간을 날짜 수로 표시한 값이다.
세 개의 정당이 있다고 생각해보자. 그리고 i번째 당의 동맹휴업지수를 hi라고 할때 h1=3, h2=4, h3=8이라고 가정하자 N일(N=14)일 동안의 세 당의 행보를 시뮬레이션 하면 다음과 같이 표시할 수 있다. 시뮬레이션은 항상 일요일에 시작하며 금요일이나 토요일에는 동맹 휴업이 없다.
요일 1 2 3 4 5 6 7 8 9 10 11 12 13 14
1번 정당 x x x x
2번 정당 x x x
3번 정당 x
동맹휴업 1 2 3 4 5
이 결과를 보면 14일 동안 정확하게 다섯번의 동맹휴업(3,4,8,9,12일)이 있음을 알 수 있다. 6일은 금요일이기 때문에 동맹 휴업이 일어낮 ㅣ않는다. 결국 2주 동안 근무 일수로 5일의 동맹 휴업이 실시된다.
몇 정당의 동맹 휴업 지수와, 어떤 정수 N이 주어졌을 때, N일 가운데 동맹 휴업으로 인해 일을 하지 않은 근무 일수를 계산하라.
입력: 입력의 첫번째 줄에는 입력될 테스트 케이스의 개수를 나타내는 하나의 ㅈ어수 T가 들어있다. 각 테스트 케이스의 첫번째 줄에는 한 개의 정수 N(7<=N<=3650)이 들어 있으며 시뮬레이션을 돌릴 기간(날 수)을 나타낸다. 그 다음 줄에는 정당의 개수를 나타내는 정수 P(1<=P<=100)가 들어간다 그 다음부터 시작하는 P 개의 줄 가운데 i번째 줄(1<=i<=P)에는 i번째 정당의 동맹 휴업 지수를 나타내는 양의 정수 hi(7의 배수는 아님)가 들어있다.
출력: 각 테스트 케이스에 대해 손실된 근무 일수를 한 줄에 하나씩 출력한다.
풀이: 입력 조건 대로 입력을 받은 다음, 1~N까지 날수를 증가하면서 처음으로 이 날짜가 금,토요일이 아닌지(j-1%7<5)로 검사하고, 동맹휴업일인지를 검사(j%h[k]==0)하여 총 동맹휴업일수를 출력한다.
소스코드 :
#include <stdio.h>
void main(void)
{
int t,n,p,h[100],chk_lost,lost,i,j,k;
scanf("%d",&t); // 케이스 갯수
while(t-->0)
{
//입력
lost=0;
scanf("%d",&n); //날 수
scanf("%d",&p); // 정당의 개수
for(i=0;i<p;i++)
scanf("%d",&h[i]); //i번째 정당의 동맹휴업 지수
lost=0;
for(j=1;j<=n;j++) //날수를 증가시키며
if((j-1) % 7 < 5) // 금,토 제외
for(k=0;k<p;k++)
if(j%h[k]==0) //오늘이 동맹휴업일인가?
{
lost++; // 휴업일+1
break;
}
printf("%d\n",lost);
}
}
'2009~2014 > C/C++' 카테고리의 다른 글
[C언어 기출문제&풀이] 두 색으로 칠하기(Bicoloring) (2) | 2011.05.16 |
---|---|
[C언어 기출문제&풀이] 쌓아 올리기(Stack 'em Up) (0) | 2011.05.15 |
[C언어 기출문제&풀이] 포커 패(Poker hands) (2) | 2011.05.15 |
[C언어 기출문제&풀이] 유쾌한 점퍼(jolly Jumpers) (0) | 2011.05.15 |
[C언어 기출문제&풀이] 후보식 투표법(Australian Voting) (0) | 2011.05.15 |