본문 바로가기
프로그래밍 언어(Programming Languages)/LeetCode

[코딩 알고리즘] LeetCode - 205. Isomorphic Strings 문제로 알고리즘의 세계로! ✨🌟

by 데이터 벌집 2024. 1. 4.

안녕하세요, 코딩 마법사 여러분! 🧙‍♂️👩‍💻 오늘은 프로그래밍의 신나는 세계로 여러분을 안내할 거예요. 우리가 다뤄볼 문제는 바로 'Isomorphic Strings'! 🎯👨‍💻 이 문제는 문자열의 패턴을 인식하는 알고리즘 능력을 테스트하는 재미있고 도전적인 문제입니다.

 

 

Isomorphic strings

 


1️⃣ 문제 설명 🤔💬

우리의 목표는 두 문자열 s와 t가 동형(isomorphic)인지 판별하는 것입니다. 동형이란 s의 문자들을 다른 문자로 치환해서 t를 얻을 수 있다는 의미죠. 중요한 건, 모든 문자의 출현은 다른 문자로 일관되게 바뀌어야 하며, 같은 문자로 매핑되어서는 안 된다는 점! 같은 문자가 자기 자신으로 매핑될 수는 있습니다. 🔄🔗

 

릿코드 문제 보러가기 


2️⃣ 알아야 할 개념 공부하기 📚🧠

  • 해시 테이블(Hash Table): 키(key)를 값(value)에 매핑하여 데이터를 효율적으로 저장하고 검색할 수 있는 데이터 구조입니다.
  • 문자열 처리: 프로그래밍 언어에서 문자열은 문자의 배열로 다루어지며, 이를 효과적으로 처리하는 방법을 익혀야 합니다.
  • 동형 문자열 패턴 인식: 같은 패턴을 가지는 문자열을 인식하는 방법을 배웁니다.

3️⃣ 문제 풀어보기 💻✨

  • 문제 접근법: 해시 테이블을 사용하여 s의 각 문자를 t의 해당 문자에 매핑합니다. 모든 문자에 대해 이 매핑이 일관되는지 확인하면 됩니다.
  • 코드 작성: 우리는 두 문자열을 순회하면서 해시 테이블을 생성하고, 이미 매핑된 문자가 다시 매핑되는지 확인합니다.
def isIsomorphic(s: str, t: str) -> bool:
    """
    Checks if two strings are isomorphic.

    Args:
        s: The first string.
        t: The second string.

    Returns:
        True if the strings are isomorphic, False otherwise.
    """

    if len(s) != len(t):
        return False

    # Use a single dictionary for bidirectional mapping
    mapping = {}
    for i in range(len(s)):
        char1, char2 = s[i], t[i]

        # Check if characters have consistent mappings
        if char1 in mapping:
            if mapping[char1] != char2:
                return False
        elif char2 in mapping:
            # If char2 is already mapped but char1 isn't, it's not isomorphic
            return False
        else:
            # Map both characters to each other
            mapping[char1] = char2
            mapping[char2] = char1  # Bidirectional mapping

    return True
  1. 길이 확인: 동형의 전제 조건으로 두 문자열이 같은 길이인지 확인합니다.
  2. 단일 사전: 양방향 방식으로 문자 매핑을 저장하기 위해 단일 사전 mapping을 사용합니다. 이렇게 하면 논리를 단순화할 수 있습니다.
  3. 일관된 매핑: 문자를 순회하면서 일관된 매핑이 있는지 확인합니다.
    • 문자가 이미 매핑되어 있으면 현재 매핑이 예상 매핑과 일치하는지 확인합니다.
    • t의 문자가 이미 매핑되어 있지만 해당 문자열 s의 문자가 매핑되어 있지 않으면 동형이 아닙니다.
  4. 양방향 매핑: 새로운 매핑이 발생하면 사전에 두 문자를 모두 추가하여 양방향 일관성을 보장합니다.
  5. True 반환: 모든 문자가 일관되게 매핑되면 함수는 동형을 나타내는 True를 반환합니다.

여기까지 'Isomorphic Strings' 문제를 통해 알고리즘의 세계를 탐험해봤습니다! 💫👨‍💻 문제를 해결하면서 중요한 개념을 배우고, 실제로 코드를 작성해보는 과정은 코딩 실력을 한 단계 업그레이드하는 데 도움이 됩니다. 🧗‍♂️🎓 여러분도 이 문제를 통해 논리적 사고와 문제 해결 능력을 키워보세요! 🚀