완전탐색

    [백준, Java] 9663번 : N-Queen

    [백준, Java] 9663번 : N-Queen

    🔗 문제 링크 https://www.acmicpc.net/problem/9663 😮 문제 해결 방법 첫 번째 행부터 차례로 모든 배치에 퀸을 놓아보는 방식의 완전탐색 문제이다. 퀸을 배치하기 전에 이전 행에 놓인 퀸 들이 움직일 수 없는 위치에 놓아야 하기 때문에 행 마다 퀸을 배치하면서 이전 행의 퀸의 배치와 겹치지 않는지 판단하는 로직을 추가한다. 이전 행의 퀸들과 겹칠 수 있는 경우는 2가지가 있다. 이전 행들에 놓인 퀸의 열과 현재 놓을 퀸의 열이 동일한 경우 이전 행들에 놓인 퀸과 현재 놓을 퀸이 대각선에 존재하는 경우 동일한 행에 퀸이 놓이는 경우도 고려해야하지만, 재귀를 이용해 한 행 (depth)마다 퀸을 배치할 것이기 때문에 동일한 행에 두 개이상의 퀸이 놓이는 경우는 발생하지 않는다. ..

    [백준, Java] 1062번 :  가르침

    [백준, Java] 1062번 : 가르침

    🔗 문제 링크 https://www.acmicpc.net/problem/1062 😮 문제 해결 방법 문제에서 남극 단어의 시작과 끝은 anta, tica로 끝난다고 했기 때문에 a,n,t,i,c는 반드시 배워야 하는 글자이다. a,n,t,i,c를 포함해 남은 알파벳 중 k개를 조합한다. 조합한 알파벳을 남극 단어마다 해당 알파벳을 모두 포함하는지 판단하면서 배울 수 있는 단어를 체크한 후 현재 까지 최대로 배울 수 있는 단어 개수와 현재 배울 수 있는 단어 개수를 비교해서 갱신한다. a,n,t,i,c는 반드시 배워야 하는 글자이므로 K가 5보다 작다면 남극 단어를 배울 수 없기 때문에 0을 리턴한다. K가 5보다 크다면 이미 5개를 배웠기 때문에 a,n,t,i,c를 제외한 (K - 5)개의 글자를 백트래..

    [백준, Java] 12100번 : 2048(easy)

    [백준, Java] 12100번 : 2048(easy)

    🔗 문제 링크 https://www.acmicpc.net/problem/12100 😮 문제 해결 방법 첫 번째 턴부터 시작해서 5턴이 넘어갔을 때 남아있는 블럭 중 최대 크기의 블럭을 탐색했다. 매 턴마다 상, 하, 좌, 우 방향으로 블록이 이동하면서 합쳐질 수 있고, 합쳐진 이후에는 해당 방향으로 블록들을 밀어줘야한다. 그리고, 한 턴당 상, 하, 좌, 우 방향으로 블록을 옮기기 때문에 각 방향으로 블록을 옮길 때마다 블록의 배열을 매 턴의 input 으로 들어온 배열로 다시 돌려놔 줘야 다른 방향에 대해서도 올바르게 탐색이 가능하다. 즉, 매 턴의 게임판의 상태 배열을 깊은 복사를 통해 한 개 더 생성한 후 복사한 배열을 통해 방향을 탐색하고, 방향 탐색을 끝냈을 땐 기존 배열로 다시 초기화 해주었다..

    [백준, Java] 16637번 : 괄호 추가하기

    [백준, Java] 16637번 : 괄호 추가하기

    🔗 문제 링크 https://www.acmicpc.net/problem/16637 😮 문제 해결 방법 문제에서 주의깊게 봐야하는 조건이 몇가지 있다. 모든 연산자의 우선순위는 동일하기 때문에 수식 계산은 왼쪽 부터 차례로 계산한다. 괄호 안에는 연산자가 한 개만 들어간다. 1번 조건을 충족하기 위해서 재귀함수 호출 시 마다 현재까지의 결과 값(ouput 파라미터)과 괄호 추가한 경우 결과값 혹은 다음 차례의 피연산자와 계산을 한 결과값을 다음 재귀 호출시 넣어주어야 한다. 2번 조건을 충족하기 위해서 **현재 차례로 부터 다음 차례와 다다음 차례 (index + 1, index + 2)**의 피연산자를 먼저 계산해준다. 그 후 현재까지의 결과 값과 다시 한번 계산 하면 괄호를 반영한 결과값을 구할 수 있..