목록알고리즘 (6)
엔지니어 블로그
풀이배열 B에 배열 A의 원소 값이 몇번이나 포함되어 있는지 확인하면 되는 문제다.이 문제는 처음에 for문을 가지고 간단히 구현해봤는데, 정답은 맞았지만 2번의 for문으로 인해 복잡도가 높아져 응답시간이 느린 코드가 되었다. 그래서 솔루션을 살짝 보니 훨씬 간단한 방법이 있었다. 코드#정답코드class Solution: def findThePrefixCommonArray(self, A: List[int], B: List[int]) -> List[int]: n = len(A) ans = [] seen = [0] * (n + 1) common = 0 for i in range(n): if seen[A[i..
풀이words2 의 글자가 words1에 포함되어있는지 확인하면 된다.hash table을 사용하는 것으로 생각하고 문제를 풀었다.사실 기존에 list를 통해 해결하려고 했지만 도저히 풀수가 없어서 hash로 사고를 전환하여 풀었다. 1.words2의 글자들로 출현 빈도가 저장된 hash table을 만든다.2.words1의 단어의 글자들의 출현빈도가 저장된 hash table을 만든다.3.두 hash table을 비교한다. 간단하지만 고민하여 푸는데 시간이 꽤나 소요되었다. 하루하루 문제를 푸니 Medium도 손을 델 순 있는 수준이 되어 가는 것 같아 기분이 좋다. 코드from collections import Counterclass Solution: def wordSubsets(self, wo..
풀이주어진 배열 nums 내 각각의 원소들의 차가 k 만큼인 pair의 수를 구하면 된다.int로 초기화 된 dict를 선언한 후 배열 내 값에서 k를 뺴거나 더한 값을 각각 tmp,tmp2에 저장한다.이후 선언해둔 dict에 차가 k 인 pair를 저장하여 그 수를 확인할 수 있게 된다. 코드class Solution: def countKDifference(self, nums: List[int], k: int) -> int: dict = defaultdict(int) cnt = 0 for num in nums: tmp, tmp2 = num+k, num-k if tmp in dict: cnt +=..
풀이본 문제는 Hash를 활용해서 풀었다.dict를 선언한 후 for문을 돌면서 문자열을 key로, count를 value로 저장하게끔 하여 각 문자열이 몇번 나오는지 체크할 수 있도록 풀었다. 코드class Solution: def areOccurrencesEqual(self, s: str) -> bool: dict = {} for i in s: if i in dict: dict[i] += 1 else: dict[i] = 1 return True if len(set(dict.values())) == 1 else False
풀이Easy 난이도이기 때문에 크게 어렵지 않게 문제를 풀 수 있었다.주어진 조건에 맞게 if문을 사용했고, 재귀함수를 사용했다.맨 첫 글자와 마지막 글자를 비교한 후 나머지 글자만 남기고 잘라내어 비교 대상의 크기를 줄여 나가는 방식이다.코드class Solution: def isPalindrome(self, x: int) -> bool: x = str(x) if len(x)
풀이days와 일자별 pass 가격이 배열로 주어진다.이때 주어진 days를 모두 여행할 수 있는 최소 pass 가격을 구하면 되는 문제다.DP 방식으로 풀이했다.(사실 DP인걸 알고 시작했다..)1.days에 있는 가장 큰 수 크기 +1 만큼의 배열을 생성한다.2.배열을 돌면서 days 배열에 있는 날짜의 값에 적절한 pass 가격을 넣어주고, 없는 날짜라면 이전 날짜의 값을 저장한 후 넘어간다.pass의 가격은 해당 day에서 각각 1,7,30일 전에 가장 쓴 돈이 적은 값을 사용하고, 그 값으로 배열을 업데이트 한다.코드class Solution: def mincostTickets(self, days: List[int], costs: List[int]) -> int: max_day..