티스토리 뷰

백준 20055번 : 컨테이어 벨트 위의 로봇

#include <stdio.h>

int rail[1002]; //레일의 내구도를 담을 배열
int robot[1002]; //로봇이 특정 레일에 있는지를 나타내기 위한 배열

int main(void)
{
	int n, k; //레일 개수, 내구도 0 몇 개?
	scanf("%d %d", &n, &k); //입력
	
	for(int i = 1; i<=2*n; i++) scanf("%d", &rail[i]); //레일 내구도 입력받음
	int in = 1; //레일 윗부분에서의 처음 시작지점
	int out = n; //레일 윗부분에서의 처음 마지막지점
	int broken = 0; //레일들의 내구도가 0이 될 때마다 1씩 늘어나는 변수
	
	int loop = 0; //몇 단계인지를 알기위한 변수
	
	while(broken < k) //step 4 //broken == k일 경우 whlie 벗어남
{
		loop++; //step 1~4를 돌면 1씩 증가
		
		if(in-1>0) in--; //step 1 레일의 시작지점과 마지막지점이 한칸 씩 이동
		else in = 2*n; //시작지점에 -1을 했는데 0이 될 경우 2*n으로 대입
			
		if(out-1>0) out--; 
		else out = 2*n; //마지막지점에 -1을 했는데 0이 될 경우 2*n으로 대입
		
		if(robot[out] == 1) robot[out] = 0; //out spot 마지막지점에 로봇이 있다면 제거
		
		for(int i = out-1; i > out-n; i--)  //step 2 로봇들이 조건 성립시 한칸 씩 이동
		{ //i = out-1인 이유 robot[out]은 step 1에서 1이더라도 반드시 0이 됨
          //i < out-n인 이유 로봇들은 레일의 절반에서만 존재할 수 있음 (레일의 절반 : n)
          //즉 마지막지점에서 1칸 전부터 시작지점 넘어까지의 로봇들이 움직일 수 있는지를 확인
			int tmp_robot = i; //초기화 겸, 대입, 이동할 로봇의 위치
			int tmp_rail = 0; //초기화, 이동한다면 로봇이 도달할 레일의 위치
		
			if(i<1) tmp_robot = 2*n+i; //i가 1 미만이 되면 2*n을 더해줌
			
			tmp_rail = tmp_robot+1; //1이 더 크다.
			if(tmp_rail>2*n) tmp_rail = tmp_rail-2*n; //2*n초과 시 2*n을 빼줌
			
			if((robot[tmp_robot] == 1 && rail[tmp_rail] != 0) && robot[tmp_rail] == 0)
			{//로봇이 있고, 이동할 곳에는 로봇이 없고, 이동 할 곳의 레일의 내구도가 0이 아닐경우
				robot[tmp_robot] = 0; //move_start //원래 있던 자리엔 더이상 로봇이 없고
				robot[tmp_rail] = 1; //move_finish //한칸 옆에 로봇이 생김! (이동완료)
				rail[tmp_rail]--; //-1 block // 레일의 내구도는 1 깎임
				if(rail[tmp_rail] == 0) broken++; //broken block //rail의 내구도가 0이 될 경우
			}
			if(robot[out] == 1) robot[out] = 0; //out spot //로봇의 마지막지점에 도달했을 경우
		}
		
		if(rail[in]>0) //step 3 //시작지점에 로봇한개를 투입, 단 투입된 레일의 내구도는 1 줄어듬
		{
			robot[in]++; //투입!!
			rail[in]--; //내구도 감소
			if(rail[in] == 0) broken++; //rail의 내구도가 0 이 될 경우	
		}	
}
	printf("%d", loop); //결과 출력
	
	return 0;
}

 

조건들

  1. 로봇은 레일 전체 길이 중 (연속적) 절반에만 위치 할 수 있다. 시작지점과 끝지점이 생긴다.
  2. 로봇은 끝(마지막)지점에 도달할 경우 레일을 떠난다.
  3. 로봇은 시작지점에서만 들어갈 수 있다.
  4. 레일의 내구도는 로봇이 투입될 때, 로봇이 이동해 올 때만 깎인다.
  5. 문제에서의 1단계부터 4단계
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함