책에 나온 문제에 추가적인 조건을 더해야 문제를 풀 수 있어요. case-insensitive란 대소문자를 구별하지 않는다는 뜻이에요. 그리고 결과는 항상 소문자로 반환해요. 📝 풀이 책의 풀이와 달라요. 제가 생각하기에 더 빠른 속도의 알고리즘이에요(O(N^2) -> O(N)). 문제의 조건에 위배되는 입력을 할 경우 무한 루프에 빠질 수 있어요. 문제의 조건에 맞는 입력을 했다는 가정하에 풀이했어요. def my_solution(paragraph: str, banned: [str]) -> str: from collections import Counter import re banned_dict = dict(Counter(banned)) paragraph_dict = Counter([word for wo..
로그를 재정렬하는 문제예요. 현업 프로젝트 코드에서도 로그는 거의 모든 부분에서 수집하기 때문에 그걸 처리하는 센스를 보는 문제라고 할 수 있어요. 난이도가 쉬운 문제인데 책에서 주어진 정보가 매우 부족하고 조건이 부실해서 책을 기준으로 문제를 풀었더니 예외처리에 시간이 오래 걸렸어요. 에서 제공하는 문제 정보는 항상 조건에 대한 정보가 부실하다고 느껴요. 반례의 상황 등에서요. 오히려 풀이를 보면서 "이렇게 풀이하는 걸 보면 문제 조건이 이렇게 제한될 수밖에 없구나"라고 판단했어요. 에 나오는 풀이 상으로는 숫자 로그는 숫자만 나오고, 문자 로그는 문자만 나와요. 혼용될 수 없지만 조건에 없었어요(그래도 덕분에 혼용되는 조건이라는 발전된 문제를 생각해볼 수 있었고 아래 고민 섹션에 코드를 올렸어요). ..
이 글을 보러 들어오신 분들은 문제를 알고 오신 분들이기 때문에 팰린드롬에 대해 추가적인 설명을 하지는 않을게요! 주어진 문자열이 팰린드롬인지 확인하는 문제예요. 다만 주어진 문자열에서 대소문자는 구별하지 않고, 영문자와 숫자만 대상으로 해요. 즉, 특수문자나 공백 문자열 등은 대상에서 제외되겠죠? 📝 풀이 어떤 알고리즘을 사용하든 전처리 작업이 필요할 거예요. 책에서는 이것을 for문을 통해서 처리하거나 정규표현식을 통해 처리하는데 저는 조금 다르게 전 처리했어요. 우선 책에서 한 전처리 방법이에요. # 반복문 사용 strs = [] for char in s: if char.isalnum(): strs.append(char.lower()) # 정규표현식 사용 s = re.sub('[^a-z0-9]', ..
팰린드롬 연결 리스트(Palindrome Linked List - 234 from Leet Code) Reference: Palindrome Linked List 🎯 문제 의의 문제 자체의 난이도는 높지 않았습니다. 연결 리스트로 구현된 자료를 반환하며 리스트에 담아 처리하면 기존의 팰린드롬 문제와 다를게 없기 때문이고, 또한 이러한 풀이가 다른 방식의 풀이와 속도 측면에서 큰 차이가 나지 않기 때문에 이 방법으로도 충분한 풀이입니다. 아래는 제 풀이입니다. node를 순회하며 값을 head_list에 담아 처리하고, head_list의 palindrome 여부를 판단합니다. 위의 return문의 Boolean은 요소를 하나하나 탐색하며 팰린드롬 여부를 파악하는 것보다 더 빠른 효율을 보여줍니다. 기능적..
문제 leetcode.com/problems/product-of-array-except-self/ 문제 상황 - 배열을 입력받아 output[i]가 자신을 제외한 나머지 모든 요소의 곱셈 결과가 되도록 출력한다. - 나눗셈을 하지 않고 O(N)에 해결한다. 해결 전략 - 두가지 방향으로 곱을 쌓아 나가 연산한다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from typing import List class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: result = [] temp = 1 for i in range(len(nums)): result.append(temp) temp *= nums[i] ..
문제 leetcode.com/problems/3sum/ 3Sum - 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 문제 상황 - 세수의 합이 0이 되는 케이스를 찾는다. 해결 전략 - Brute Force로 모든 경우를 순회하며 가능성을 찾으면 되지만 O(N^3)로 일반적 조건에서 속도 이슈가 발생할 수 밖에 없다. - 투포인터를 활용해 한 요소를 기준으로 두 요소를 더해 그 합이 0보다 크면 줄이고, 0보다 작으면 키우는 방향으로 포인터를 이동시킨다. - 이를..
문제 - 높이를 입력받아 비 온 후 얼마나 많은 물이 쌓일 수 있는지 계산하라. - 입력 => [0,1,0,2,1,0,1,3,2,1,2,1] - 출력 => 6 문제 상황 - 높이와 너비 모든 공간을 체크하면 O(N^2)로 풀이가 가능하지만 O(N)으로 속도를 줄일 수 있다. 해결 전략 - 크게 투포인터 방식과 스택을 이용한 방식이 있다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def solution(heights:list) -> int: left, right = 0, len(heights)-1 leftmax, rightmax = 0, 0 water = 0 # 총 물의 양 # index left가 right보다 왼쪽에 있을 동안 반복 while left
두 수의 합 - 덧셈하여 타겟을 만들 수 있는 배열의 두 숫자 인덱스를 리턴하라 - 입력 => nums = [2, 7, 11, 15], target = 9 - 출력 => [0,1] 풀이 1 : 브루트 포스(Brute Force) - 모든 경우를 전부 탐색한다. 1 2 3 4 5 def solution(nums:list, target:int) -> list: for i in range(len(nums)-1): for j in range(i+1,len(nums)): if nums[i] + nums[j] == target: return [i, j] cs - O(N^2)의 속도 풀이 2 : in 연산 사용 - in을 이용한 탐색 1 2 3 4 5 6 def solution(nums:list, target:int..
- Total
- Today
- Yesterday
- filter#isalnum#lower
- 리모컨#완전탐색#BOJ#Python
- 토마토#백준알고리즘#Python
- 미로 탐색#백준알고리즘#Python
- 파이썬알고리즘인터뷰#4장
- 섬의개수#백준알고리즘#Python
- django#slicing
- PassingCars#Codility#Python
- N으로 표현#DP#Programmers#Python
- django
- 텀 프로젝트#백준알고리즘#Python
- 반복수열#백준알고리즘#Python
- NumberofDiscIntersections#Codility#Sort#Python
- 순열사이클#BOJ#Python
- 병든 나이트#BOJ#탐욕법#Python
- 날짜 계산#BOJ#완전탐색#Python
- 종이자르기#분할정복#BOJ#Python
- Distinct#Codility#Python
- 나무자르기#BOJ#이분탐색#Python
- 배열합치기#분할정복#BOJ#Python
- 백준 알고리즘#BackTracking
- 쿼드트리#BOJ#분할정복#Python
- 터틀비치#리콘#xbox#controller
- Triangle#Sorting#Codility#Python
- 랜선자르기#이분탐색#BOJ#Python
- 암호코드#dp#BOJ#Python
- 공유기 설치#BOJ#이분탐색#Python
- Swift#Tuples#Range
- API#lazy#
- Brackets#Stacks and Queues#Codility#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |