새소식

PS/LeetCode

884. Uncommon Words from Two Sentences (Python)

  • -

Problem : https://leetcode.com/problems/uncommon-words-from-two-sentences

 

Difficulty : Easy

 

Status : Solved

 

Time : 00:08:23

 


 

문제 설명

 

 

더보기

번역

여기서 문장이란, 알파벳 소문자로 이루어진 단어들이 스페이스바 공백 하나로 구분되는 문자열을 의미한다.

 

또한 어떤 단어가 한 문장에서 오직 딱 한번 나타나고, 다른 문장에서는 나타나지 않을 때 그 단어를 평범하지 않다고 하자.

 

문장 s1, s2가 주어졌을때, s1과 s2 안의 평범하지 않은 단어 리스트를 반환하라. 단어의 순서는 상관이 없다.


 

풀이

 

오랫만의 풀이가 되었다. 일에 이리 치이고 저리 치이다보니 이렇게 늦어졌다.

 

핵심은 uncommon을 빠르게 구하는 것이 될 텐데, 각 문장을 한 번이라도 등장한 단어(s), 한 번만 등장한(u) 단어 집합을 구한다고 가정하자.

그렇다면 s1 기준으로 uncommon한 단어는 (s1에서 한 번이라도 등장하고), (s2에서 한 번도 등장하지 않아야 한다). 즉 둘의 차집합을 구하는 셈이다. s2 기준으로도 동일하다. (s2에서 한 번이라도 등장하고), (s1에서 한 번도 등장하지 않아야 한다).

즉 수식으로 적으면 UNION((u1 - s2), (u2 - s1))가 되는 셈이고, 이에 맞게 구현만 해주면 된다.

 

풀이 코드

class Solution:
    def findUniqueWord(self, s: str):
        visit = set()
        unique = set()
        for _s in s.split() :
            if _s in visit :
                unique.discard(_s)
            else :
                unique.add(_s)
                visit.add(_s)
        return visit, unique

    def uncommonFromSentences(self, s1: str, s2: str) -> List[str]:
        s1_visit, s1_unique = self.findUniqueWord(s1)
        s2_visit, s2_unique = self.findUniqueWord(s2)
        return list(s1_unique.difference(s2_visit).union(
            s2_unique.difference(s1_visit)))

'PS > LeetCode' 카테고리의 다른 글

241. Different Ways to Add Parentheses  (0) 2024.09.19
179. Largest Number  (1) 2024.09.18
2331. Evaluate Boolean Binary Tree  (0) 2024.05.16
1219. Path with Maximum Gold  (0) 2024.05.14
861. Score After Flipping Matrix  (0) 2024.05.14
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.