본문 바로가기

bruteforce

백준 알고리즘 14500 입력 : 종이사이즈 N*M, 종이 위에 적힌 수 출력 : 테트로미노와 닿은 수를 합한 수들 중 가장 큰 수 풀이 1. 테트로미노는 5개이지만 회전, 대칭이 가능하기 때문에 회전했을 때와 대칭했을 때의 모양도 각각 만들어둔다. -> 테트로미노는 왼쪽 위를 기준으로 만든다. ex) ---- : (0,0), (0,1), (0,2), (0,3) 2. 한 테트로미노의 기준점(왼쪽 맨위)을 종이 위의 모든 칸에 적용해 수를 합해본다. -> 종이를 벗어날 경우엔 0 3. 2번에서 구한 값들 중 가장 큰 수를 출력한다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39..
백준 알고리즘 14501 입력 : 퇴사까지 남은 날짜 N, 상담 일정표 출력 : 백준이가 받을 수 있는 최대 수익 풀이 1. 다이나믹 프로그래밍의 전형적인 문제이므로 재귀함수 하나, 캐시테이블 하나를 정의해둔다. 2. 기저조건 : 업무기간이 N일을 넘어갈 경우 수익이 발생할 수 없음으로 0을 반환하도록한다. 3. 각 날짜에 잡힌 상담을 할 경우와 안할 경우를 비교해 더 큰 쪽을 리턴 ->점화식 : C(i) = max( C(i+1), C(i+T[i]) + P[i] ) 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include #include using namespace std; int T[20]; int ..
백준 알고리즘 12100 입력 : N * N 크기 2048게임판이 주어졌다. 출력 : 2048게임의 룰에 맟춰 좌우상하로 움직일 수 있을 때, 5번 움직여 만들 수 있는 가장 큰 수 풀이 1. vector를 사용해 입력으로 주어진 게임판을 저장 2. 좌우상하로 한번 움직인 후의 게임판의 모습을 반환하는 함수를 각각 정의 -> 한 숫자는 한 차례에 한 번만 합쳐질 수 있다 ex) 8 4 2 2 를 오른쪽으로 이동시키면 0 8 4 2가 되어야 함. 0 0 0 16이 되면 안됨 -> 계산 범위가 0~N-1을 벗어나지 않도록 지정해야 한다. 3. 게임판을 파라미터로 받는 함수 moveBoard에서 좌우상하 모두 이동시켜본다. 4. 좌우상하로 이동시켜본 후의 게임판정보를 사용해 총 4회 moveBoard를 재귀실행해 가장 큰 값을 리턴한..