프로그래밍 33

[문자열 조작] 그룹 애너그램

* leetcode 49. Group Anagrams Q. 문자열 배열을 받아 애너그램 단위로 그룹핑하라. # 입력 ["eat", "tea", "tan", "ate", "nat", "bat"] # 출력 [ ["ate", "eat", "tea"], ["nat", "tan"], ["bat"] ] 풀이 1. 정렬하여 딕셔너리에 추가 def groupAnagrams(self, strs: List[str]) -> List[List[str]]: # defaultdict를 사용하면 항상 디폴트 키를 생성해주기 때문에 KetError를 피할 수 있다. anagrams = collections.defaultdict(list) for word in strs: # sorted로 정렬한 문자열을 키값으로 사용하기 위해 joi..

[문자열 조작] 가장 흔한 단어

* leetcode 819. Most Common Word Q. 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉽표 등) 또한 무시한다. # 입력 paragraph = 'Bob hit a ball, the hit BALL flew far after it was hit.' banned = ["hit"] # 출력 "ball" 풀이 1. 리스트 컴프리헨션, Counter 객체 사용 def mostCommonWord(self, paragraph: str, banned: List[str]) -> str: # 정규식을 사용한 전처리 # \w는 단어 문자(word character를 뜻하며, ^는 not을 의미하며 따라서 paragraph의 모든 # 단어 ..

[문자열 조작] 로그 파일 재정렬

* leetcode 937. Reorder Log Files Q. 로그를 재정렬하라. 기준은 다음과 같다. 로그의 가장 앞 부분은 식별자다. 문자로 구성된 로그가 숫자 로그보다 앞에 온다. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다. 숫자 로그는 입력 순서대로 한다. # 입력 logs = ["dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"] # 출력 ["let1 art can", "let3 art zero", "let2 own kit dig", "dig1 8 1 5 1", "dig2 3 6"] 풀이 1. 람다와 + 연산자를 이용 def reorderLogFiles(self, l..

[문자열 조작] 문자열 뒤집기

Q. 문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라. """예제 1""" # 입력 ["h", "e", "l", "l", "o"] # 출력 ["o", "l", "l", "e", "h"] """예제 2""" # 입력 ["H", "a", "n", "n", "a", "h"] # 출력 ["h", "a", "n", "n", "a", "H"] 풀이 1. 투 포인터를 이용한 스왑 # 리턴 없이 리스트 내부를 직접 조작하라는 제약사항이 있으므로 아래와 같이 두개의 포인터로 내부를 # 스왑하는 방식으로 풀이가 가능하다. def reverseString(self, s: List[str]) -> None: left, right = 0, len(s) - 1 while left..

[문자열 조작] 유효한 팰린드롬

Q. 주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다. 예제 1 # 입력 "A man, a plan, a canal: Panama" # 출력 true 예제 2 # 입력 "race a car" # 출력 false 풀이 1. 리스트로 변환 def isPalindrome(self, s: str) -> bool: """ 전처리 """ strs = [] for char in s: if char.isalnum(): # 영문자, 숫자만을 대상 strs.append(char.lower()) # 대소문자 구문 없으므로 소문자로 변환 # -> strs = ['a', 'm', 'a', 'n', 'a', 'p', 'l', 'a', 'n', 'a', # 'c', 'a', 'n..