본문 바로가기

교육/문제해결

[1일차] 충전버스

- 문제설명

0에서 출발해 N번 정류장까지 가는 버스가 있다.

1번 충전해서 갈수 있는 거리 K, 정류장갯수 N, 충전소 갯수 M

1<= N, K, M<=100

만약 1번에 갈수있는 거리가 3이고 충전기가 아래 표와 같을 때

정류장 

1

2 

3 

4 

5 

6 

7 

8 

충전기 

 

 

 

 

 

 

 

 


 충전

 

 

 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