#include <stdio.h>
int use[20]={0}; //사용할 벽장
int open(int a, int b, int i, int u, int sum); //벽장문의 최소 이동 횟수 찾기
int minus(int num); //음수일 경우 양수로 바꿔주는 함수
int main(void)
{
int n, a, b, u, i, result;
scanf(" %d", &n); //벽장의 개수
scanf(" %d %d", &a, &b); //초기에 열려있는 두 벽장
scanf(" %d", &u); //사용할 벽장들의 순서의 길이
for(i=0; i<u; i++)
scanf(" %d", &use[i]); //사용할 벽장 번호
result=open(a, b, 0, u, 0);
printf("%d", result);
return 0;
}
int open(int a, int b, int i, int u, int sum) //벽장문의 최소 이동 횟수 찾기
{
if(i>=u) //더 이상 열어야 할 문이 없을 때
return sum;
int len_a=open(use[i], b, i+1, u, sum+minus(a-use[i]));
int len_b=open(a, use[i], i+1, u, sum+minus(b-use[i]));
//printf("i=%d a=%d b=%d sum=%d len_a=%d len_b=%d \n", i, a, b, sum, len_a, len_b);
if(len_a>len_b)
return len_b;
else
return len_a;
}
int minus(int num)
{
if(num<0) //음수일 경우 양수로 바꿔주기
return (-1*num);
else
return num;
}
2018.02.10 12:07
정올 - 알고리즘 - 벽장문의 이동(1409)
조회 수 651 추천 수 0 댓글 0