리트코드 알고리즘/리트코드 easy
(간단한 코드)리트코드 383. Ransom Note
문학적 딥러닝
2024. 12. 12. 21:41
이 문제는 다음과 같다. magazine이라는 문자열에 있는 문자들로 ransomNote의 문자열을 만들 수 있는가이다.
여기서 주의해야 할 점은 magazine의 문자열들은 각각 "한번씩"만 사용할 수 있다는 점이다.
그렇다면, 개수에 한계가 있다는 것을 들었을 때는 무조건 딕셔너리를 사용해야 한다(이를 해쉬맵 이라고도 부른다).
우선 magazine문자열 이용해 딕셔너리로 만들어주고, 만들어진 딕셔너리와 ransomNote의 문자열을 비교해서, 성립하는지 확인 하면 된다.
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
if len(ransomNote) > len(magazine): return False
h = {} # 딕셔너리 선언
for m in magazine: # for문을 통해 magazine의 문자열을 딕셔너리로 정리!
if m not in h:
h[m] = 1 #기존에 없으면 생성!
else:
h[m] += 1 #기존에 있으면 +1
for r in ransomNote: # 이제 ransomNote를 정리한 딕셔너리와 비교!
if r in h:
if h[r] < 1: #만약에 해당 하는 값이 0일 경우
return False # Fasle라고 반환!
h[r] -= 1 #값이 0이 아니면 1개 빼주기!
else:
return False #값이 딕셔너리 h에 들어있지 않으면 False!
return True #for문을 무사히 통과하면, 문제가 없는걸로 True!
이 문제는 딱히 기발한 그런 방법이 필요하지는 않았다. 딕셔너리 자체가 시간을 단축시키는 방법이기도 하고,
굳이 하자면, 딕셔너리를 생성하는데 Collection이라는 녀석을 사용하는데, 이는 기본 구조를 알고 나서 공부하는게 좋다.