Programming/leetcode
-
23. Merge k Sorted ListsProgramming/leetcode 2021. 1. 26. 10:31
리스트를 오름차순으로 정렬하는 문제 다만 리스트 안에 관계가 linked-list로 이루어져있다. 더보기 Input: lists = [[1,4,5],[1,3,4],[2,6]] Output: [1,1,2,3,4,4,5,6] Explanation: The linked-lists are: [ 1->4->5, 1->3->4, 2->6 ] merging them into one sorted list: 1->1->2->3->4->4->5->6 아이디어 1) 기존 linked-list에서 새로운 linked-list를 만드는 방법 어차피 linked-list의 순서가 의미가 없으므로, value만 가져와 정렬후, 정렬된 값으로 새로 Link-list를 만든다. * 2차원 배열인줄 알고 for문 두번 돌려서 할려고 했..
-
1437. Check If All 1's Are at Least Length K Places AwayProgramming/leetcode 2021. 1. 26. 08:37
1월 26일 오늘의 문제 0과 1로 구성되는 배열과 k가 주어지고, 배열 값이 1일때 k 범위안에 또 다른 1이 있으면 False, 끝까지 탐색했을 때는 True n^2으로 풀 수 있는 문제 앞에서부터 가면서 1을 만나면, 앞/뒤로 k범위 안에 1이 있는지 확인 def kLengthApart(self, nums: [int], k: int) -> bool: for i, num in enumerate(nums): # 현재 값이 1이면 내 위치에서 i-k, i+k 안에 1이 들어 있었는지 확인 if num == 1: for j in range(i-k, i): if j=len(nums):break if nums[j] == 1: return False return True 01/26/2021 08:15 Accep..
-
5. Longest Palindromic SubstringProgramming/leetcode 2021. 1. 25. 15:30
문자열의 부분중 가장 긴 회문 찾기 문제이다. Dynamic Programming(이하 DP)으로 많이 풀지만, 이번에는 window sliding기법을 이용해서 풀어보자. 사실 DP로 푸는 것은 잘 이해가 되지 않았다.. 더보기 Input: s = "babad" Output: "bab" Note: "aba" is also a valid answer. 아이디어는 이렇다. 현재 위치를 중심으로 양 옆을 늘려가면서 회문인지 확인하는 것이다. ex) 'abac'에서 위치를 찾아보자. 두번째 'b'의 위치에서 보자 b를 중심으로 양 옆에 'a'가 있고, 'aba'는 회문이 된다. 하지만 이 아이디어에서 조심해야될것이 중심을 홀수, 짝수를 구분해야된다는 것이다. 이유는 홀수, 짝수 일때 중심이 달라지기때문이다. ..
-
49. Group AnagramsProgramming/leetcode 2021. 1. 21. 16:01
주어진 단어들 사이에서 출현빈도수가 같은것들만 묶어서 출력 출력할때 순서는 길이와 사전순이다. Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat","tan"],["ate","eat","tea"]] -> eat, tea, ate는 알파벳 횟수가 동일하므로 같은 군에 속한다. -> output에는 길이와 사전순 정렬이 필요하다. 1차 아이디어 collection을 이용해서 빈도수를 세고, collection.Counter끼리 비교 -> 시간 초과 result = [] for str in strs: if not result: result.append([str]) else: flag = False for items in resu..
-
819. Most Common WordProgramming/leetcode 2021. 1. 21. 12:40
문단과 금지어가 주어지는데, 가장 많이 나온 단어를 출력 단, 금지어에 포함안되어 있어야함\ 사용되는 특수문자는 문제에서 주어진다. 정규식을 사용하면 문단을 구분하기 쉬움 리스트 컴프리헨션을 이용해서 새로운 리스트 만들어보기 most_common()을 자주 사용할 것 같음 def mostCommonWord(paragraph, banned) -> str: # 리스트 컴프리헨션을 이용해서 새로운 리스트를 만든다. # 정규 표현식으로 현재 paragraph에서 특수문자를 공백으로 만들고, 공백 기준으로 문자를 잘라서 넣어둔다. change_sub = [word for word in re.sub('[.,!?\';]', ' ', paragraph.lower()).split()] # 책에 나온 방법인데, 나눈 문자..
-
937. Reorder Data in Log FilesProgramming/leetcode 2021. 1. 21. 10:18
주어진 데이터에서 문자데이터와 숫자데이터를 구분하는 문제 맨앞에 문자 데이터/숫자 데이터에 따라서 구분자가 주어짐(let, dig) 문자 데이터는 구분자를 제외하고, 사전순으로 정렬하되, 같을 경우에는 구분자순서로 정렬 숫자데이터는 들어온 순서대로 출력 풀이 def reorderLogFiles(logs) -> [str]: let, dig = [], [] for item in logs: #"dig1 8 1 5 1", "let1 art can"을 구분하는 방법 # dig1과 let1로 구분해도 되지만, 어차피 숫자log는 뒤에 숫자만 나옴 # 따라서 짤라봐서 배열 1번이 숫자면 숫자에 넣고, 그렇지 않으면 문자에 넣자 if item.split(' ')[1].isalpha(): let.append(item) ..
-
125. Valid PalindromeProgramming/leetcode 2021. 1. 21. 09:06
leetcode.com/problems/valid-palindrome/ Valid Palindrome - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 난이도 Easy 일명 '회문'으로 문제 ex) abba -> true abbc -> false 다만, 문제에서는 알파벳과 숫자만 취급하므로 그에 따른 처리가 필요하다. 풀이 def isPalindrome(s:str)->bool: #전통적인 for문 이용 i, j = 0, len(s)-1 while i