본문 바로가기

알고리즘 (2020 : 08 : 10 ~ )/완전탐색

(25)
[백준 / BOJ] 12101 1, 2, 3 더하기 2 (cpp) 문제 출처 : https://www.acmicpc.net/problem/12101 12101번: 1, 2, 3 더하기 2 n을 1, 2, 3의 합으로 나타내는 방법 중에서 사전 순으로 k번째에 오는 것을 출력한다. k번째 오는 식이 없는 경우에는 -1을 출력한다. www.acmicpc.net 만들려는 숫자 n이 주어졌을때, n을 1,2,3을 이용해서 만들고 n을 만드는 경우의 수의 조합중 k번째를 찾아 출력하는 문제이다. 풀이 이런 유형의 DP를 풀어본적이 있어서 DP라고 착각했지만, n의 최댓값이 11로 작아서 완전탐색으로도 풀리는 문제다. 로직은 간단한데, 재귀를 이용해서 1,2,3으로 숫자 n을 만드는 모든 경우의 수를 저장해놓은다음 정렬 후 출력하면 된다. 주요 소스코드 void getComb(i..
[백준 / BOJ] 23247 Ten (Java) 문제 출처 : https://www.acmicpc.net/problem/23247 23247번: Ten Your program is to read from standard input. The input starts with two positive integers $m$ and $n$ ($1 \le m, n \le 300$), denoting the dimensions of the land, which are given separated by a space. Each of the following $m$ lines contains $n$ positive in www.acmicpc.net N*M그리드에서 A*B범위의 사각형을 만들때, 그 사각형 범위안에 포함된 원소의 합을 10으로 만드는 사각형 범위의 갯수..
[prgrammers / kakao] 외벽 점검 (Java) 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/60062 코딩테스트 연습 - 외벽 점검 레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하 programmers.co.kr 원형으로 되어있는 벽에 취약지점이 있다. "스카피"는 원형으로 되어있는 벽의 취약지점에 친구들을 투입해서, 취약지점을 수리하려고 한다. (단, 친구들은 각자 지정된 거리만 이동할 수 있다.) 이때, 친구들을 최소몇명 투입해야 외벽을 모두 수리할 수 있는지 찾는 문제다. 풀이 백 트래킹에 그리디로 푸는 문제다. weak의 길이가 최대 15, dist..
[programmers/kakao] 코딩테스트 - 추석 트래픽 (Java) 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/17676?language=java includedLog.getStartSeconds()) return true; return false; } public long getStartSeconds(){ return this.startSeconds; } public long getEndSeconds(){ return this.endSeconds; } public Log(String logLine){ String[] splitedLogLine = logLine.split(" "); String date = splitedLogLine[1]; String operationTime = splitedLogLine[..
[백준/BOJ] 1038 감소하는 수 문제 출처 : https://www.acmicpc.net/problem/1038 1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 음이 아닌 정수의 가장 큰 자릿수 부터 가장 작은 자릿수까지 각 자릿수가 모두 감소하는 수를 감소하는 수라고 한다. 이 때, N번째 감소하는 수를 찾는 문제다. 풀이 N이 최대 1,000,000이길래 처음에는 DP로 생각했는데, 좀만 더 생각해보면 탐색횟수가 그렇게 크지 않다는 것을 알 수 있다. (DP식이 나오긴 하는걸로봐서 DP로 풀릴거 같긴 함) 음이 아닌 정수가..
[백준 / BOJ] 17471 게리맨더링 문제 출처 : https://www.acmicpc.net/problem/17471 17471번: 게리맨더링 선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다. www.acmicpc.net N개의 선거구와 각 선거구에 사는 인원수가 주어진다. 선거구는 2개의 선거진영으로 나뉘며, 이때, 각 선거진영 선거진영 별로 모두 연결되어있어야한다. 이때, 선거진영의 인구수 차이를 최소화하는 값을 구하는 문제다. 풀이 비트마스킹을 이용한 완전탐색으로 푼 문제다. 처음엔 비트마스킹 + 백 트래킹으로 생각했으나, 이 방법으로는 모든 경우를 봐주지 못해서 풀기 힘들어 보였다. 알고리즘은 다음과 같다. 1. ..
[백준 / BOJ] 10881 프로도의 선물 포장 (Java) 문제 출처 : https://www.acmicpc.net/problem/10881 10881번: 프로도의 선물 포장 프로도는 네오에게 줄 생일 선물을 세 개 샀다. 이 세 개의 선물은 직사각형 모양의 선물 상자에 각각 하나씩 담겨 있다. 프로도는 이 선물들을 적당한 크기의 직사각형 포장 상자에 넣어 포장하 www.acmicpc.net 프로도는 네오에게 줄 생일 선물을 세 개 샀다. 선물 세 게를 N*M 크기의 상자에 적절히 담을려고한다. (모든 상자의 면은 서로 수평되어야 하며, 상자는 90도 회전가능하다.) 이때, 상자의 사이즈를 가장 작게하는 프로그램을 구하는 문제다. 풀이 상자가 최대 3개이고, 테스트케이스도 10,000이므로 완전탐색으로 풀수있는 문제다. 다만, 구현이 까다로웠는데, 상자의 크기가..
[백준 / BOJ] 16918 봄버맨 (Java) 문제 출처 : https://www.acmicpc.net/problem/16918 16918번: 봄버맨 첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다. www.acmicpc.net R*C그리드가 있다. 0 초 - 봄버맨은 초기에 폭탄을 하나 설치한다. 1 초 - 봄버맨은 초반 1초에는 아무것도 하지않는다. 2 초 - 봄버맨이 폭탄이 없는곳에 폭탄을 설치하고 3초전에 설치한 폭탄을 터트린다. 3 초 - 봄버맨이 폭탄이 없는곳에 폭탄을 설치하고 3초전에 설치한 폭탄을 터트린다. 4 초 - 봄버맨이 폭탄이 없는곳에 폭탄을 설치하고 3초전에 설치한 폭탄을 터트린다. . . . 위 과정..