본문 바로가기

브루트포스11

Programmers - 수식 최대화(Java) https://programmers.co.kr/learn/courses/30/lessons/67257?language=java 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr 풀이 입력으로 주어진 문자열을 숫자, 연산자로 분리 연산자의 우선순위에 대해 모든 경우의 수를 탐색 - 경우의 수마다 계산하여 최대값과 비교 갱신 연산자, 숫자 분리 전역변수 정의 // 문자열의 숫자 부분 static List numList = new ArrayList(); // 문자열의 연산자 부분 static List optList.. 2022. 1. 17.
BOJ 16985 - Maaaaaaaaaze(Java) https://www.acmicpc.net/problem/16985 16985번: Maaaaaaaaaze 첫째 줄부터 25줄에 걸쳐 판이 주어진다. 각 판은 5줄에 걸쳐 주어지며 각 줄에는 5개의 숫자가 빈칸을 사이에 두고 주어진다. 0은 참가자가 들어갈 수 없는 칸, 1은 참가자가 들어갈 수 있는 칸을 www.acmicpc.net 풀이 1. 2가지를 기준으로 모든 경우의 수를 탐색 1) 판의 회전(어느 판을 얼만큼 회전할지) 2) 회전을 완료한 5개의 판 쌓기 2. 위의 기준으로 만든 3차원 행렬을 bfs 거리 탐색 몇번째 판이 몇도 회전하는지 각 판마다 몇 도 회전하는지 모든 경우의 수를 탐색 - 현재 판을 90도 회전 시키고 다음 판에 대해 재귀 호출 5번째(마지막)판에 대한 결정이 끝나면 판을 쌓.. 2022. 1. 6.
ALGOSPOT - Synchronizing Clocks(JAVA) https://www.algospot.com/judge/problem/read/CLOCKSYNC algospot.com :: CLOCKSYNC Synchronizing Clocks 문제 정보 문제 그림과 같이 4 x 4 개의 격자 형태로 배치된 16개의 시계가 있다. 이 시계들은 모두 12시, 3시, 6시, 혹은 9시를 가리키고 있다. 이 시계들이 모두 12시를 가리키도록 www.algospot.com 풀이 스위치를 누르는 모든 경우의 수를 탐색(브루트 포스) 3, 6, 9, 12를 1, 2, 3, 0으로 변환 for (int j = 0; j < LEN; j++) { int temp = Integer.parseInt(st.nextToken()); watches[j] = (temp / 3) % 4; } 같.. 2021. 12. 16.
BOJ 14888 - 연산자 끼워넣기(C++) https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 풀이 연산자마다 가능한 수가 정해져있음 -> 해당 연산자 개수와 숫자 개수(N)의 모든 경우의 수 탐색(브루트 포스) 1. 연산 순서 백터의 크기가 N-1보다 작으면 현재 사용가능한 연산자중에서 하나를 연산순서에 push, 연산 순서 백터의 크기가 N-1과 같다면 2로 이동 * 계산할 수가 N개라면 연산자의 개수는 N-1 2. 해당 연산자 순.. 2021. 10. 16.
BOJ 2615 - 오목(C++) https://www.acmicpc.net/problem/2615 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 풀이 자표와 방향성에 대해 탐색했는지 확인을 위한 bool 3차원 배열 visit 사용 오목판의 현재 위치에 대해 8방향을 탐색해야하지만 2중 for문을 이용해 왼쪽에서 오른쪽, 위에서 아래로 탐색하기 때문에 4방향으로만(동, 남동, 남, 남서) 제한하여 탐색 위의 방향으로 탐색할 경우 (1, 1)을 시작으로 연속되었는지 확인 한 후 (2, 2)에서 (1, 1)로 연속성을 확인 비효율적이고 vis.. 2021. 10. 5.
BOJ 14889 - 스타트와 링크(C++) https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 풀이 1. 스타팀에 누가 포함될지 N/2명을 뽑는 경우의 수에 대해 탐색 - bool 자료형의 1차원 배열 visit을 이용하여 스타트 팀에 포함되었는지 여부를 확인 - 배열의 값이 true면 스타트 팀, false면 링크 팀 2. 스타트 팀, 링크 팀에 대해 각각 점수 계산 - 2중 for문을 이용하여 i와 j가 같은 팀일때의 해당 팀의 점수를 더함 - visit[i] && visit[j] 이면 스타트 팀, !vis.. 2021. 10. 5.
Programmers - 자물쇠와 열쇠(C++) https://programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 풀이 자물쇠 크기 재할당 (2 x (열쇠크기-1) + 자물쇠크기) x (2 x (열쇠크기-1) + 자물쇠크기) 후 정중앙에 자물쇠 값 할당 더보기 재할당된 자물쇠에서 한칸씩이동, 90회전으로 모든 경우의 수를 탐색 - 열쇠의 사이즈만큼 자물쇠 배열에 + 연산 - 실제 자물쇠의 영역을 확인 -> 값이 1이 아니라면 return false - returen false로 빠져나가는 것이 없다면 return true .. 2021. 9. 5.
BOJ 12100 - 2048(Easy)(C++) https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 풀이 상하좌우를 이용한 5번 이동에 모든 경우의 수를 탐색 해당 경우에 대해 이동(상하좌우 모든 경우에 대한 이동을 구현하지 않고 위로 이동에 대한 이동만 구현) - 상하좌우에 따라 회전 - 상 : 0˚, 하: 180˚, 좌 : 90˚, 우: 270˚ - 위로 이동 - 다시 제자리로 회전 - 상 : 0˚, 하: 180˚, 좌 : 270˚, 우: 90˚ - 5번의 이동이.. 2021. 9. 2.
BOJ 15684 - 사다리 조작(C++) https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 풀이 추가한 가로선이 3개가 초과되지 않도록 모든경우의 수를 확인 원래의 세로선으로 돌아가는 지 세로선마다 확인 왼쪽으로 갈지, 오른쪽으로 갈지 구별하기 위해 왼쪽에서 오른쪽으로 이어지는 시작점만 true로 표기 더보기 if (map[y][now]) now++; else if (map[y][now - 1]) now--; ex) #include using namespace std; int N, M.. 2021. 8. 31.