[C++] 백준 1592 : 영식이와 친구들

#include <iostream>

int N, M, L; // 자리 수, 종료 조건, L번째
int arr[51] = {0};
int cnt = 0, idx = 1; // 1번 학생부터 시작
int main(int argc, char** argv){
  scanf("%d %d %d", &N, &M, &L);

  while(arr[idx] != M){
    cnt++; // 공 던지는 횟수 세기

    if(arr[idx] % 2 != 0){ // 홀수인 경우 시계 방향
      if(idx + L > N){ // 범위 초과
        idx = (idx + L) - N;
      } else {
        idx = idx + L;
      }
    } else { // 짝수인 경우 시계 반대 방향
      if(idx - L < 1){ // 범위 초과
        idx = N + (idx - L);
      } else {
        idx = idx - L;
      }
    }
    arr[idx]++; // 공 받은 횟수 세기
  }

  printf("%d", cnt - 1); // 첫번째 시작은 공 안 던짐

  return 0;
}

시뮬레이션 연습용 문제. 링크드리스트를 사용해야할까 고민했지만 단순하게 그냥 배열의 index를 사용해서 풀었다.

좋은 웹페이지 즐겨찾기