본문 바로가기

전체 글327

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.
06 - 보글 게임 (BOGGLE) 1. 주어진 칸에서 시작해서 특정 단어를 찾을 수 있는지 확인하는 문제. 시작점(y,x), 단어(word)를 주겠다는 것 예상 2. (y,x) 에서 8방향 탐색(갔던 곳을 다시 갈 수도 있으니 dfs라고 보긴 힘들듯) 3. 기저사례 -(y,x)에 있는 글자가 원하는 단어의 첫 글자가 아닌 경우 실패 -원하는 단어가 한 글자인 경우 성공 포인트 -매 탐색마다 글자의 맨 앞글자에만 의미 부여 4. 시간복잡도는 word의 길이 n에 대해 O(8^n) 5. bool hasWord(y,x,word) 형태의 재귀적 탐색 if board[y][x] != word[0] -> return false; if word.size() == 1 -> return true; for(int dir=0; dir5 || nx>5 || ny 2019. 6. 23.
06 - n개의 원소 중 m개를 고르는 모든 조합을 출력 본격적인 내용에 들어가기 전에 소개한 알고리즘이다. n개의 원소 중 3개를 고르는 것을 for문으로 작성한다면 3중 for문 형태가 될 것이다. for(int i=0; i 2019. 6. 23.