본문 바로가기

Coding Test/Exhaustive search

(6)
[Programmers] 84512번 - 모음사전 (백트래킹) 1. 문제 파악문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42839문제 정의: 모음의 개수만큼 조합한 문자열의 순서를 구해라.문제의 제약 파악 (입력값 크기, 상수 조건)word의 길이는 1 이상 5 이하입니다.word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.2. 문제 풀이1. 문제 접근모음을 조합해서 문자열을 생성할수있다. 문제에서 주어진 조건을 만족하는 해(word)의 조합을 찾아야하므로 완전탐색을 써야한다.word가 AAAAE인 경우, "A" -> "AA" -> "AAA" -> "AAAA" -> "AAAAA" -> "AAAAE" 이므로 6번째 단어이다.각 모음마다 모든 모음을 탐색하는 ..
[Programmers] 86971번 - 전력망을 둘로 나누기 (간선 제거 후 DFS 완전탐색) 1. 문제 파악문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/86971문제 정의: 트리에서 간선을 하나 끊고 두개로 나눠진 트리의 가장 작은 개수 차이를 구해라.문제의 제약 파악 (입력값 크기, 상수 조건)n은 2 이상 100 이하인 자연수2. 문제 풀이1. 핵심 풀이 접근일단, 양방향 그래프를 분할했을때의 분할된 두 트래의 개수차가 가장 적은 차를 구해야한다. 그래프 탐색를 해야하고 모든 경로를 탐색하는 완전탐색 문제이다.이문제에서 핵심은 "트리 분할을 어떻게 할것인가?" 였다.주어진 간선으로 트리를 끊을 생각을 했어야했다.1. 간선을 끊은 트리의 완전 탐색트리는 일반적인 그래프 탐색이 필요하므로 DFS, BFS 중에 아무거나 쓰면된..
[Programmers] 87946번 - 피로도 (백트래킹) 1. 문제 파악문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/87946문제 정의: 여러 던전중 가장 많이 탐색할수있는 던전의 개수는?문제의 제약 파악 (입력값 크기, 상수 조건)k는 1 이상 5,000 이하인 자연수입니다.dungeons의 세로(행) 길이(즉, 던전의 개수)는 1 이상 8 이하입니다.2. 문제 풀이1. 문제 접근모든 던전을 시작점으로부터 탐색 가능한 모든 경로를 찾는 것이므로 완전탐색을 수행해야한다. 그리고 다음 조건을 만족해야하므로 백트래킹이 떠올랐다.탐색가능: 남은 피로도 - 최소 필요 피로도 >= 0탐색 경로 복원: 남은 피로도 -= 소모 피로도2. 핵심 문제 풀이 도출그러면 일반적인 백트래킹 로직에다가, 방문한..
[Programmers] 42842번 - 카펫 (Brute Force) 1. 문제 파악문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42842?language=java문제 정의: 노란색 직사각형이 가운데 위치하는 카페트의 가로와 세로를 찾아라.문제의 제약 파악 (입력값 크기, 상수 조건)갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.2. 문제 풀이1. 문제 접근직사각형을 나눠떨어지는 약수로 가로와 세로를 정한다.카펫의 가로 세로는 Y로 만드는 직사각형의 가로 세로 보다 +2 이상 커야한다.카펫은 Y와 B로 생성할수있다.따라서 Y로 생성한 직사각형..
[Programmers] 42839번 - 소수 찾기 (Backtracking) 1. 문제 파악문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42839문제 정의: n자리수애서 각 자리수의 조합으로 만드는 모든 소수를 판별해서 카운팅문제의 제약 파악 (입력값 크기, 상수 조건)numbers는 길이 1 이상 7 이하인 문자열numbers는 0~9까지 숫자만으로 이루어져 있습니다."013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미2. 문제 풀이1. 문제 접근나는 문제를 다음의 4가지로 크게 나누었다.,모든 자리수의 조합 찾는 로직문자열을 숫자로 변환하는 로직소수 찾는 로직소수를 카운팅하는 로직완전 탐색 문제란것은 알았지만, 곧바로 백트래킹으로 풀생각을 못했다.아래와 같이 조합하는 경우의 수를 나열해보면..
[Leetcode] 17번 - 전화번호 문자 조합 (Backtracking) 1. 문제 파악문제 링크: https://leetcode.com/problems/letter-combinations-of-a-phone-number/문제 정의: 주어진 문자열 digits의 문자와 매칭되는 String 문자열을 digits의 길이만큼 조합한 문자열을 반환해라.문제의 제약 파악 (입력값 크기, 상수 조건)0 총 입력크기: digit에 매칭되는 문자열이 최대 길이 ^ digits의 길이 = 4^42. 문제 풀이1. 핵심 문제 풀이 도출(문제 의도 파악)입력: digits = "23"출력: ["ad","ae","af","bd","be","bf","cd","ce","cf"]위의 예시를 보면, 문자열 digits길이만큼 각 숫자가 가질 수 있는 문자 조합을 전부 나열해야한다. 그러므로 문자열 di..