[LeetCode#93] Restore IP Addresses

2024. 11. 24. 18:20·Algorithm/문제풀이

 

❐ Description


이번 문제는 기존의 순열이나 조합을 다루는 백트래킹 문제와는 달리, 입력이 문자열로 주어지고 이를

조각으로 나누어가며 탐색하는 백트래킹 유형이다. 문자열의 앞뒤를 탐색하며 유효성을 검증해야 하기

때문에, 문자열을 동적으로 분할하는 로직이 추가적으로 필요하다.

 

 

 

 

 

❐ 풀이 전략


☑️ 문자열 분할의 시작 지점을 cursor 변수에 저장한다.

☑️ IP의 8비트 최대 길이인 3만큼 for문을 순환한다.

☑️ 문자열 분할의 종료 지점을 cursor + length로 나타낸다.

☑️ 생성된 부분 문자열이 0으로 시작하지 않는 10의 자리 숫자 이상인지 확인한다.

☑️ 생성된 부분 문자열이 255 이하를 충족하는지 확인한다.

☑️ dot(점)의 수가 4개가 넘어간다면 해당 IP는 무시한다.

☑️ 현재 cursor가 input의 길이보다 크거나 같고, dot의 수가 4개라면 IP를 결과에 추가한다.

 

 

 

 

 

❐ Solution


public class Solution {

    List<String> answer = new ArrayList<>();

    public List<String> restoreIpAddresses(String s) {
        backTracking(s, 0, 0, new StringBuilder());
        return answer;
    }

    public void backTracking(
        String input,
        int cursor,
        int dotCount,
        StringBuilder ip
    ){
        if (dotCount > 4) {
            return;
        }
        
        if (dotCount == 4 && cursor >= input.length()){
            answer.add(ip.substring(0, ip.length() - 1));
            return;
        }
        
        for (int length = 1; length <= input.length() && cursor + length <= s.length(); i++) {
            String segment = input.subString(cursor, cursor + length);
            if (segment.charAt(0) == '0' && segment.length() != 1) {
                break;
            }
            if (Integer.parseInt(segment) <= 255) {
                int prevLenght = ip.length():
                ip.append(segment).append(.);
                backTracking(input, cursor + length, dotcount + 1, ip);
                ip.setLength(prevLenght);
            }
        }
    }
}

 

 

 

 

 

 


'Algorithm > 문제풀이' 카테고리의 다른 글

[LeetCode#130] Surrounded Regions  (0) 2024.12.14
[LeetCode#131] Palindrome Partitioning  (0) 2024.11.24
[LeetCode#47] Permutation Ⅱ  (0) 2024.11.19
[LeetCode#424] Longest Repeating Character Replacement  (0) 2024.11.15
[Programmers] 입국심사  (0) 2024.10.21
'Algorithm/문제풀이' 카테고리의 다른 글
  • [LeetCode#130] Surrounded Regions
  • [LeetCode#131] Palindrome Partitioning
  • [LeetCode#47] Permutation Ⅱ
  • [LeetCode#424] Longest Repeating Character Replacement
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (207)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (6)
        • Java (3)
        • Kotlin (3)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (39)
        • 친절한 SQL 튜닝 (9)
        • 데이터 중심 애플리케이션 설계 (14)
        • 이벤트 기반 마이크로서비스 구축 (6)
        • Spring Batch docs (10)
        • Quartz docs (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    binarysearch
    Back-Tracking
    오블완
    sliding-window
    부분단조성
    greedy
    Two-Pointer
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
[LeetCode#93] Restore IP Addresses
상단으로

티스토리툴바