[LeetCode#93] Restore IP Addresses
·
Algorithm/문제풀이
❐ Description이번 문제는 기존의 순열이나 조합을 다루는 백트래킹 문제와는 달리, 입력이 문자열로 주어지고 이를조각으로 나누어가며 탐색하는 백트래킹 유형이다. 문자열의 앞뒤를 탐색하며 유효성을 검증해야 하기때문에, 문자열을 동적으로 분할하는 로직이 추가적으로 필요하다.     ❐ 풀이 전략☑️ 문자열 분할의 시작 지점을 cursor 변수에 저장한다.☑️ IP의 8비트 최대 길이인 3만큼 for문을 순환한다.☑️ 문자열 분할의 종료 지점을 cursor + length로 나타낸다.☑️ 생성된 부분 문자열이 0으로 시작하지 않는 10의 자리 숫자 이상인지 확인한다.☑️ 생성된 부분 문자열이 255 이하를 충족하는지 확인한다.☑️ dot(점)의 수가 4개가 넘어간다면 해당 IP는 무시한다.☑️ 현재 c..
[LeetCode#47] Permutation Ⅱ
·
Algorithm/문제풀이
❐ Description[LeetCode#46] Permutation Ⅰ에 이은 문제이다.이번 문제에서는 중복된 요소를 제어하는 것이 핵심이다.     ❐ 탐색 과정에서 중복을 피하기1. 아이디어이번 문제를 효율적으로 풀이하기 위해서 꼭 떠올려야 하는 아이디어다.동일한 숫자 중에서, 이전 숫자를 방문하지 않았다면 현재 숫자를 선택하지 않는다.  2. 그림으로 이해하기만약 중복을 피하지 않는다면 아래와 같이 중복되는 경우도 탐색하게 된다. 하지만 탐색 과정에서 중복되는 경우는 탐색하지 않는다면 아래와 같이 불필요한 탐색을 건너 뛸수 있다.  3. 코드로 이해하기private boolean hasDuplicatedElements( int i, int[] nums, boo..
[LeetCode#46] Permutation
·
Algorithm/문제풀이
❒ Description제목Permutation링크https://leetcode.com/problems/permutations/description/자료구조비선형 (그래프)시간복잡도 O(n!)Permutation(순열)이란, 모든 가능한 경우를 그래프 형태로 나열한 결과라고 할 수 있다.이 문제는 BackTraking을 통해서 해결하는 문제인데, 모든 가능한 순열을 생성하기 때문에nums의 크기가 커질수록 시간이 급격히 증가한다. ❒ Solution1. Solution1public class Solution { public List> permute(int[] nums) { List> results = new ArrayList(); List elements = Arrays.s..