#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)
조회 수 599 추천 수 0 댓글 0