본문 바로가기

알고리즘/종만북19

07 - 쿼드 트리 QUADTREE_SOL #include #include using namespace std; string reverse(string::iterator& it) { char head = *it; ++it; if (head == 'b' || head == 'w') return string(1, head); //head string형태 return string upperLeft = reverse(it); string upperRight = reverse(it); string lowerLeft = reverse(it); string lowerRight = reverse(it); return string("x") + lowerLeft + lowerRight + upperLeft + upperRight; } int main() { int.. 2019. 6. 30.
07 - 쿼드 트리 QUADTREE 1. 흑백 그림의 string 형태 표현에 대한 규칙설명, string 형태 표현 입력으로 주어졌을 때 그림을 상하반전했을 때의 결과에 대한 string 형태 표현을 출력으로 하는 문제. 2,3. 문제에서 트리를 그림으로 굳이 보여준 것에 의문을 갖고 생각해보니 주어진 입력을 트리로 구성만 한다면 x의 자식은 항상 4개고 w,b의 자식은 항상 없으니 루트트리부터 3,4,1,2번째 자식 순회하면 ㅆ가능하다고 생각함. 4. 처음엔 재귀로 트리를 구성하려 했지만 내 수준이 너무 떨어져서인지 구현할 수 없었음. string의 최대 길이가 1000이므로 for문으로 돌려도 가능하겠다 싶어서 구현해봄. 1) 첫 인덱스부터 for문을 돌린다면 자식노드로 사용된 노드는 다음에 부모 노드로 사용될 수 있지만, 부모 노드.. 2019. 6. 30.
06 - 시계 맞추기 CLOCKSYNC 1. 시계 16개를 모두 12시가 되도록 스위치를 누르는 문제. 2,3. 스위치와 시계의 연결은 const vector linked[10] = { //[switch][clock]형태 {0,1,2}, {3,7,9,11}, {4,10,14,15}, {0,4,5,6,7}, {6,7,8,10,12}, {0,2,14,15}, {3,14,15}, {4,5,7,14,15}, {1,2,3,4,5}, {3,4,5,9,13} }; 이렇게 함. 스위치를 4번 이상 누르는 경우가 없다. 스위치를 누르는 순서는 상관이 없다 (이걸 생각을 못해서 처음에 재귀를 못짬.) -> 스위치 누르는 순서를 0번-9번으로 강제함. 기저: 누를 스위치가 10번(존재하지않음)일 때 시계들이 정렬돼 있다면 0, 아니면 큰 수 반환 5. #incl.. 2019. 6. 27.
06 - 게임판 덮기 BOARDCOVER 1. 흰 칸에 4가지 타입의 ㄴ모양 블럭을 둬서 꽉 채우는 경우의 수를 출력. 2. 현재 위치 기준으로 fx[4][3] = { {0,0,1}, {0,0,1}, {0,1,1}, {0,1,1} }; fy[4][3] = { {0,1,1}, {0,1,0}, {0,0,1}, {1,0,1} }; 에 블럭을 두도록 설계하자. 3.map[][]에 문자 입력받고, mark[][]에 블럭을 둔 곳을 표시하도록 함. (입력받을 때 검정색 부분도 마크하도록 함) map의 제일 좌상단을 기준으로 x가 1증가하는 방향(x범위 초과 시 y 1증가, x = 0)으로 탐색 int go(int cy, int cx) //게임판을 덮는 경우의 수를 출력하는 재귀함수 기저: - 모든 블럭이 마크됐으면 게임판이 덮어 진 것으로 return 1.. 2019. 6. 25.