목록전체 글 (41)
엔지니어 블로그
풀이배열 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..
풀이이 문제는 list 내의 각 원소가 서로 포함 관계인지 파악하면 되는 문제였다. 그래서 반복문을 2개 사용하여 각 원소를 비교하되, 길이가 같거나 기준이 되는 원소의 길이가 길다면 pass하도록 설계했다. 한번 에러가 나서 확인해보니 중복값이 들어갈 수 있었다. 그래서 set 자료구조를 활용하여 중복값을 제거하는 방식으로 해결했다. 코드class Solution: def stringMatching(self, words: list[str]) -> list[str]: answer = set([]) length = len(words) for i in range(length): for j in range(length): ..
풀이우선 제시 된 조건처럼 isPrefixAndSuffix를 정의한다. 내부에서는 str1이 str2에 prefix,suffix를 동시에 만족하는지 확인한다. 이후 countPrefixSuffixPairs에서 isPrefixAndSuffix 를 호출하여 가장 앞의 원소와 뒤의 원소들을 차례차례 비교해가며 몇개의 case가 만족하는지 체크하면 된다. 이 문제는 아무 답지의 도움 없이 혼자서 풀어낸 첫 leetcode 문제여서 감회가 새롭다. 열심히 해서 더 높은 레벨의 문제들도 척척 푸는 사람이 되고싶다..!코드class Solution: def countPrefixSuffixPairs(self, words: list[str]) -> int: answer = 0 while l..
풀이주어진 배열 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..