- 문제설명
0에서 출발해 N번 정류장까지 가는 버스가 있다.
1번 충전해서 갈수 있는 거리 K, 정류장갯수 N, 충전소 갯수 M
1<= N, K, M<=100
만약 1번에 갈수있는 거리가 3이고 충전기가 아래 표와 같을 때
정류장 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
충전기 |
ㅇ |
|
ㅇ |
|
ㅇ |
|
ㅇ |
|
|
충전 |
|
|
1 |
|
2 |
|
3 |
|
|
충전을 3번하면 9번까지 도착할 수 있다.
- 입력
1 // 테스트 케이스
3 9 4 // 한번에 갈수 있는 거리, 정류장 수, 충전기 갯수
1 3 5 7 // 충전기가 위치한 정류장
- 출력
#1 3
- 입력 예시
3
3 10 5
1 3 5 7 9
3 10 5
1 3 7 8 9
5 20 5
4 7 9 14 17
- 출력 예시
#1 3
#2 0
#3 4
-코드
int input[100];
int charge[100];
int main(int argc, const char * argv[]) {
int T;
scanf("%d", &T);
for(int tc = 1;tc <= T;tc++)
{
int reachDistance, stopNum, chargeNum;
scanf("%d %d %d",&reachDistance,&stopNum,&chargeNum);
for(int i = 0; i< stopNum+1; i++) // 충전소 초기화
{
charge[i] = 0;
}
for(int i=0;i<chargeNum;i++) // 충전소 위치에 1로 표시
{
scanf("%d",&input[i]);
charge[input[i]] = 1;
}
int chargeCount = 0;
for(int i =0;i<stopNum;) // 정류장 도착할때까지 루프
{
int count = 0;
int lastIndex = i;
for(int j=i+1;j<=reachDistance+i;j++) // 한번에 갈수 있는 거리만큼 루프
{
if (charge[j] == 1) // 충전소가 있으면
{
count++; // 카운팅
lastIndex = j; // 위치 기억
}
}
if(count >= 1) // 한번 이상 충전소를 거쳤다면
{
chargeCount++; // 충전횟수 증가
i = lastIndex; // 위치 기억
if(i + reachDistance >= stopNum) // 만약 지금부터 한번에 갈 수 있는 거리가 정류장 수를 넘는다면 도착으로 판별
break;
}
else // 한번도 충전소를 못갔다면 실패 처리
{
chargeCount = 0;
break;
}
}
printf("#%d %d\n",tc,chargeCount);
}
return 0;
}
'교육 > 문제해결' 카테고리의 다른 글
[2일차][재귀함수] 작업지시하기 (0) | 2017.08.29 |
---|---|
[2일차][재귀함수] 전기버스 (0) | 2017.08.29 |
[1일차] 부분 배열의 합 (0) | 2017.08.28 |
[1일차] 사선으로 채우기 (0) | 2017.08.28 |
[1일차] 나선형 배열 (0) | 2017.08.28 |