본문 바로가기

728x90

그 땐 Algorithm했지

(56)
[self-study/level 1] 체육복 | 탐욕법(Greedy) - 도전편 문제 내 풀이 1️⃣첫 번째 시도 def solution(n, lost, reserve): lost_and_reserve_student = set(lost) & set(reserve) for student in lost_and_reserve_student: lost.remove(student) reserve.remove(student) if len(lost) > len(reserve): return n - (len(lost) - len(reserve)) else: return n 👉🏻일단 여벌의 체육복을 가져왔는데 도난당한 학생들을 lost와 reserve에서 제외시켰다. 그리고 나서 체육 수업을 들을 수 있는 학생 수를 반환했다. ✅set 📌중복이 없는 자료구조이다. lost = [2, 4] reser..
[TAVE/level 2] 튜플 문제 내 풀이 1️⃣첫 시도 def solution1(s): striped_s = s.strip("{""}") #2},{2,1},{2,1,3},{2,1,3,4 s_list = striped_s.split("},{") #['2', '2,1', '2,1,3', '2,1,3,4'] long_s = max( s_list, key=lambda x:len(x)) #2,1,3,4 answer = [ int(i) for i in long_s if i != ","] #['2', '1', '3', '4'] return answer 👉🏻결과로 나오는 [2, 1, 3, 4]와 [3, 2, 4, 1] 이 두 리스트가 같다고 착각을 했다. 즉 리스트의 원소만 같으면 같은 튜플에서 나온 결과값이라고 착각을 했다. 때문에 아래와 같..
[TAVE/파이썬 알고리즘] Ch8 | 연결 리스트 - 13번 팰린드롬 연결 리스트(leetcode 234) 📌연결 리스트: 선형적인 자료구조이다. 구조체 각각이 서로 연결된 형태로 구성되어 있고 메모리 어딘가에 흩뿌려져 있다. 해당 구조체는 다음 구조체가 무엇인지에 대한 정보를 담고 있어 연결된 형태를 유지할 수 있는 것이다. 📌팰린드롬: 회문이라고도 부른다. 거꾸로 읽어도 제대로 읽은 것과 같은 문장이나 낱말, 숫자, 문자열 등이다. 리스트 변환 1️⃣파이썬의 리스트로 변환한다. q: List = [] node = head #리스트 변환 while node is not None: q.append(node.val) node = node.next 2️⃣pop함수에 인덱스를 지정해 요소를 추출하며 같은 값인지 확인한다. #팰린드롬 판별 while len(q) > 1: if q.pop(0) != q.pop(): r..
[TAVE/파이썬 알고리즘] Ch7 | 배열 - 11번 자신을 제외한 배열의 곱 왼쪽 곱셈 결과에 오른쪽 값을 차례대로 곱셈 1️⃣왼쪽→오른쪽 방향으로 곱한다. out = [] #왼쪽 곱셈 p = 1 for i in range(0, len(nums)): out.append(p) p = p * nums[i] 📌공간 복잡도는 O(1)을 위해 기존 out 변수를 재활용한다. 👉🏻p와 리스트의 각 요소들 간의 곱셈 결과를 그대로 out 리스트에 담는다. 👉🏻결과: [1, 1, 2, 6] ✍🏻만약 별도의 리스트 변수를 만들고 그 변수에 우측 곱셈 결과를 넣으면 공간 복잡도는 O(1)이 된다. ✅공간복잡도 O(n) 👉🏻저장되는 메모리, 변수 양에 따라서 공간복잡도가 결정된다. 배열이 중첩될수록 n의 차수가 높아진다. ✍🏻참고로 시간복잡도는 코드 실행의 시간에 따라 결정된다. for문이 중첩될수..
[TAVE/파이썬 알고리즘] Ch6 | 문자열 조작 - 4번 가장 흔한 단어 리스트 컴프리헨션, Counter 객체 사용 1️⃣ Data Cleansing 📌입력값에 대한 전처리 작업 👉🏻대소문자가 섞이고 쉼표 등 구두점 등을 처리해준다. words = [word for word in re.sub(r'[^\w]', ' ', paragraph) .lower().split() if word not in banned] ✍🏻정규식 문법 \w 단어 문자 ^ not 👉🏻단어 문자가 아닌 모든 문자를 공백으로 치환하는 역할을 한다. 👉🏻다음으로 소문자로 바꿔주고 공백으로 나눠준다. 👉🏻마지막으로 if문을 써주어 금지 단어를 제외한 단어들을 리스트로 저장한다. 2️⃣ 흔한 단어 추출 counts = collection.defaltdict(int) for word in words: counts[..
[TAVE/level 1] 나머지가 1이 되는 수 찾기 문제 내 풀이 def solution(n): for i in range(n): last = n % (i+1) if last == 1: return i+1
[TAVE/level 1] 문자열 다루기 기본 문제 내 풀이 def solution(s): answer = False if len(s) == 4 or len(s) == 6: if s.isdigit(): answer = True return answer 📌문자열이 온전히 숫자로만 이루어져 있는지 확인하기 위해 isdigit()을 사용했다.
[TAVE/level 1] 시저 암호 문제 내 풀이 capital = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lower = 'abcdefghijklmnopqrstuvwxyz' def solution(s, n): answer = '' for i in range(len(s)): if s[i] in capital: after_idx = capital.index(s[i]) + n if after_idx > 25: after_idx = after_idx - 26 answer += capital[after_idx] elif s[i] in lower: after_idx = lower.index(s[i]) + n if after_idx > 25: after_idx = after_idx - 26 answer += lower[after_idx] ..

728x90