목록Algorithm/SSW (3)
-
그냥. 노가다로 풀었다. rotate 함수를 호출할때마다 x,y의 좌표의 경계와 그 다음을 위치를 체크하여 맵의 범위를 벗어나려하면 스킵하였다. 문제를 정확히 읽어야만... 맵의 숫자를 주사위에 카피하고 맵의 숫자를 0으로 초기화 해주지 않아 한참을 고생하였다. 코드: #include using namespace std; int n, m, x, y, k, o;int map[21][21];int cube[4][3];int cp[4][3];int nx;int ny; //동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4 void copy_cube(){for (int i = 0; i < 4; i++){for (int j = 0; j < 3; j++){cp[i][j] = cube[i][j];}}}int rotate..
DFS로 해결가능 한 문제이다. 하지만 다른 분들이 푼 방식을 보니 DP를 사용하였더라. DFS로 단순히 탐색을해서 푼것보다 분명 DP를 사용해 푸는것이 시간적인 면에서 훨씬 효율적일 거란 생각이 든다. 우선 내가 푼 방식은 1일째부터 차례대로 dfs로 탐색을 해준다. 표에 있는 예제대로 진행한다면, 1일에 일을 했따면 4일부터 가능하다. 4일에 일을 할 수 있는지 판단하고 다시 dfs로 진행한다. 이처럼 매번 해당 일이 N+1의 마감일을 넘지 않는지 확인해 준다. 1일부터 시작했다면 2일부터 시작을 또 해줘야한다. 그렇게 3,4,5,6,7일을 "시작으로" 탐색을 시작한다. 왜냐하면 저 예제에서는 1일부터 하는 것이 최적의 답이겠지만, 다른 경우가 충분히 있을 수 있기 때문이다 !! dfs에서 V[i]를..
설마 모든 좌표에 대해서 3개의 벽을 세운뒤 BFS로 문제가 해결될 줄 몰랐다. 맵의 크기가 작기 때문에 가능했다. DFS를 보통 x,y,len 이런식의 파라미터를 넣는게 익숙하다 보니 습관적으로 문제를 정확히 분석하기 보다는 습관대로 파라미터를 만들어 놓고 시작하는데 좋지 않은 습관인듯하다. 복습할 때 DFS 활용 방식을 꼭 눈여겨 보자. 코드: #include #include #include using namespace std;int N, M;int map[9][9];int map2[9][9]; int px[4] = { -1, 0, 1, 0 };int py[4] = { 0, -1, 0, 1 }; // up left down rightint cnt;int num_1;int num_2;int ans;st..