본문 바로가기

브루트포스 알고리즘22

[백준 2231] 분해합 [C] 풀이 4673 - 셀프 넘버 문제와 비슷하다. 단, 생성자의 여부가 아닌, 가장 작은 생성자를 출력해야 한다. 생정자의 범위는 N - 자리수 * 9 부터 N-1이다. 만약 생성자를 구하지 못했다면, 0을 반환한다. 소스코드 #include int selfNum(int n){ int cnt = 0, temp = n; for (; temp > 0; temp /= 10) ++cnt; for (int i = n - 9*cnt; i 0; temp /= 10) result += temp%10; if (result == n) return i; } return 0; } int main(){ int N; scanf("%d", &N.. 2021. 7. 25.
[백준 9663] N-Queen [C] 풀이 하나의 행에는 하나의 퀸만 존재한다는 점을 이용해, 배열의 index는 행, value는 퀸의 위치로 구현했다. nQueen() 0행 부터 Brute Force 방식으로 퀸이 놓일 수 있는지 확인하고, cnt값을 조작한다. put_check() 현재 행(index)의 value(퀸의 위치)가 다음 행의 value와 일치한다면, 동일한 열에 퀸이 놓인 것 이므로, 다음 열에 퀸을 놓는 경우로 넘어간다. 현재 행(row)에서 이전 행(i)들을 뺀 값이 현재 행의 value(퀸의 위치)에서 이전 행의 value를 뺀 절대값과 동일하다면, 동일한 대각선 상에 퀸이 놓인 것 이므로, 다음 열에 퀸을 놓는 경우로 넘어간다. 소스코드 #include #include int N, board[15], cnt; in.. 2021. 7. 24.
[백준 1065] 한수 [C] 풀이 원래는 Brute Force로 해결하는 문제지만, 수의 범위가 작기 때문에 다음과 같이 풀이했. 1 ~ 99는 비교할 다음 자리의 수가 없기 때문에 한수이다. 백의자리 - 십의자리 = 십의자리 - 일의자리가 같으면 한수이다. 소스코드 #include int ap(int n){ int cnt = 0; for (int i = 1; i 0 && i < 100) cnt ++; else if (i/100 - (i%100)/10 == (i%100)/10 - ((i%100)%10)) cnt++; return cnt; } int main(){ int N; scanf("%d", &N); printf("%d", ap(N)); } 출처 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한.. 2021. 7. 18.
[백준 1018] 체스판 다시 칠하기 [C] 풀이 N * M 크기의 보드를 2차원 배열로 입력받고, (0, 0), (0, 1), (0, 2), ... 각 요소들을 기준으로 8 * 8크기의 보드를 수정해 체스판을 만들 때, 몇 개의 칸이 수정되어야 생성되는지 최소값을 기록하는 방식으로 해결할 수 있다. 맨 처음 시작좌표인 (0, 0)을 기준으로 다음과 같은 체스판을 생성하기 시작한다고 가정한다. (빨간 사각형) 기준이 되는 시작 좌표는 (row, col)이며, 이 값을 가상의 보드를 생성하는 함수로 복사한다. 시작 좌표를 기준으로 (row ~ +7, col ~ +7)의 범위 (빨간 사각형) 안에서, 체스판을 생성할 때 최소 몇개의 칸이 수정되는지 확인 검정칸 이어야 하는 곳((i + j) % 2 == 0)이 검정칸이면, white++, 아니면 bla.. 2021. 7. 15.