본문 바로가기

파이썬14

[자료구조/알고리즘] - Queue/Deque 큐는 FIFO, First-In-First-Out 선입선출로 처리됩니다. 지난번에 스택을 정리할 때 테니스공, 셔틀콕을 넣는 통에 스택을 비유 했었는데, 큐의 경우에는 다른 예시 보다 책 예시가 좋은 거 같아서 적어본다. 우리가 흔히 식당에 들어가기 위해서 대기줄을 서는 경우가 있는데 그 때 제일 먼저 대기줄에 선 손님분들 부터 입장을 하게 된다. 이런 식으로 작동을 하는게 큐라고 보면 된다. 스택의 거의 모든 연산을 파이썬에서 지원해 주듯이 리스트는 큐의 모든 연산을 지원해줍니다. 주의할 점은 리스트는 동적 배열로 구현되어져 있어서 큐의 연산을 수행하기에는 효율적이지 않아, Deque라는 별도의 자료형을 사용해야 좋은 성능을 낼 수 있다. 어제오늘 큐 문제를 최대한 많이 풀려고 했는데 파이썬으로 푼 문.. 2023. 5. 13.
[자료구조/알고리즘] - 문자열 문자열 조작이란 문자열을 변경하거나 분리하는 등의 여러 과정을 말합니다. 언어에 따라서 문자형이 다로 없는 경우에는 비교적 조작이 까다로운 편이지만, 대부분의 언어에서는 별도의 문자열 자료형과 문자열 조작에 대한 기능을 제공해주기 때문에 언어에서 기능들을 잘 활용하면 좋습니다. 백준이나 리트코드 문제를 푼지 한참 되서 그냥 기억나는 문자열 문제들의 특징은 항상 전처리(?)를 잘해주면 문제 풀기가 편했다는 점, 그리고 파이썬으로 풀 때 정답 출력을 잘 맞춰줬어야 되는 점 정도 였던 것 같습니다. 문자열 관련 문제를 좀 찾아서 풀었는데, 문제를 풀면서 실수했던 부분이나 자주 사용하는 부분을 정리해봤습니다. 리스트 모아서 문자열로 출력해주기 str = ''.join(arr) # 숫자는 처리를 더 해줘야 함. .. 2023. 5. 10.
LEETCODE(리트코드) 49번 Group Anagrams 문제 설명 문자열 배열을 주고 문자열 구성요소가 같은 것들끼리 그룹을 지어서 배열로 반환해주면 되는 문제 문제 푸는데 필요한 요소들 문자열 서순을 바꿔줘야 할 거 같음 문자열 같은 거 끼리 배열에 넣어주기 위와 같이 생각을 하고 처음에 문제를 제출 했었던 코드 class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: sort_strs = [] for str in strs: if sorted(str) not in sort_strs: sort_strs.append(sorted(str)) result = [] for i in sort_strs: temp = [] for str in strs: if i == sorted(str): .. 2022. 11. 25.
LEETCODE(리트코드) 125번 Valid Palindrome (유효한 팬린드롬) 파이썬 알고리즘 인터뷰를 보고 알고리즘이라고 해야 되나 자료구조라고 해야 되나 공부를 다시 조금씩 하는 중입니다. 이책에서는 리트코드 문제를 풀어서 영어 공부도 되지 않을까라는 생각에 책을 골랐는데 생각보다 많이 어려운 거 같아요. 문자열을 뒤집어도 같은 경우에는 똑같은 경우에는 true를 반환해주고 다른 경우에는 false로 반환해주면 되는 문제 문제를 보고 필요하다고 생각했던 것들은 아래와 같다. 문자열들만 비교를 해줘야 되서 특수문자 다 빼주기 문자열 뒤집는 걸 어떤 걸 써서 해줄지 그래서 각 항목 마다 써줄려고 했던 요소들은 아래와 같다. 정규표현식 문자열 치환 - re.sub("[^a-zA-Z0-9]", "", s) 첫 번째 인자 : [^a-zA-Z0-9] 두 번째 인자 : 첫 번째 인자에 해당.. 2022. 11. 25.
알고리즘 다시 공부하기 3일차 정렬 알고리즘 → 도출하는 결과는 같더라도 알고리즘에 따라 성능과 효율이 달라지기 때문에 작동원리와 장단점 파악 필요 → 알고리즘 문제 풀 때 + 코딩테스트 문제 풀 때 기본적으로 자주 사용하게 되는 요소가 아닌가 싶음 버블 정렬 삽입 정렬 병합 정렬 셸 정렬 선택 정렬 → 평소에 안썼던 정렬들이 더 많은 거 같음. ⇒ 파이썬은 느리다는 단점이 있어서 퀵 정렬을 쓰는게 좋다고 배웠는데 내용들 보면서 봤을 땐 병합 정렬이 좋을 수도 있겠단 생각이 들었음(+ 연결리스트?) *파이썬에서 변수 편하게 바꾸기 → a, b = b, a (양쪽 값을 편하게 바꿀 수 있음, 평소에 temp 써서 임시로 담아두는거 안해둬도 됨!) 1. 버블 정렬 가장 간편하지만 속도가 가장 느린 알고리즘, 가장 큰 값을 반복적으로 옮겨.. 2022. 9. 12.
알고리즘 다시 공부하기 2일차 2일차 파이썬 자료구조 정리 리스트 → 수정 가능한 일련의 요소들을 저장하는데 주로 사용하는 구조 저장 되는 요소들의 자료 유형은 같지 않아도 됨 리스트를 만들려면 [] 안에 데이터 요소들을 넣고 쉼표로 구분해주면 됨 알고리즘이 작동할 때 임시 데이터를 다루는데 유용함 aList = ["Hello", 33 , "Daegu", True] print(List) 주로 사용 하는 방식 리스트 인덱싱 → list_colors[1] 리스트 슬라이싱 → list_colors[0:2] → 인덱스 0번에서 1번 까지 슬라이싱(0 ≤ a < 2) → list_colors[:2] → 인덱스 처음부터 1번까지 슬라이싱((0 ≤ a < 2) 네거티브 인덱싱 → 끝에서 거꾸로 세어주는 방식 → 뒤에서 부터 세어준다고 생각하면 됨.. 2022. 9. 11.
알고리즘 다시 공부하기 1일차 1일차 알고리즘 설계 시에 고민해야 하는 거 알고리즘이 우리가 기대한 결과를 출력하는지 선택한 방법이 최선인지 규모가 더 큰 데이터 셋에도 동작할지 알고리즘의 분류 데이터 집약적 알고리즘 → ex) 대용량에 파일에 적용된 압축 알고리즘 연산 집약적 알고리즘 → ex) 매우 큰 소수를 찾는 알고리즘 1번 + 2번을 한 알고리즘 → 자원 소모 多, 가용한 자원 지능적 할당 필요! 데이터 → 크기 + 속도 + 다양성 (속도 기준 : 배치 → 주기적 → 준 실시간 → 실시간 프로세서 순) 연산 → 문제를 처리하는데 소요되는 자원에 관련 된것 → 하려는 일에 따라서 더 많은 처리 능력이 필요로 해짐 성능 분석하기 공간 복잡도 분석 → 알고리즘이 입력데이터를 처리하는데 필요한 메모리양 추정 알고리즘이 돌아가는 과정.. 2022. 9. 7.
꾸준히 다시 공부하기 2021.12.26일자로 다시 빡세게 백준 문제를 풀기 시작했습니다. 한 20일 정도 지났는데 하루에 그래도 한문제씩은 푸는 속도로 하나씩 꾸준하게 풀어가보려고 합니다. (이제는 진짜 전역의해가 밝았기 때문에 ㅎㅎ) 일단은 크게 계획을 세워서 풀고 있어서 한번 적어보자면 1. 백준 단계별 풀어보기 1)입출력 단계~12)정렬 단계 까지 정리하면서 기본정도는 쳐야 될거 같아서 하나씩 풀어보고 있습니다. (이전에 풀어봤던 문제도 있고, 아니면 파이썬으로 혹은 다른언어로 풀어본 문제도 있어서 하나씩 차근차근 돌아본다는 느낌으로 풀어보고 있습니다.) 2. 백준 단계별 풀어보기 그다음은 백준 강의에 있는 알고리즘 기초/중급 정도 까지 문제를 풀어볼까 합니다. 확실히 머리는 쓰는 만큼 잘굴러가는 거 같아서 입대하기 .. 2022. 1. 15.
[Portfolio 만들기] 어떻게 만들까? 구름 IDE를 통해서 포트폴리오 라고 해야 되나, 저의 지난 3년을 대충이나마 정리해둘 사이트를 만들기로 했습니다. 메인 프레임워크 Django로 결정을 하였습니다. → 결정 이유, 하던걸 일단 다시 써봐야 잘하는지 알 수 있어서 + 제일 잘 사용해서 → 이게 제일 사용하기 편해서 사이트에 담을 내용들 1. 지금까지 해왔던 프로젝트들 → 사이드 프로젝트 부터 소프트웨어 마에스트로에서 진행했던 프로젝트 까지 기억나는 대로 내용을 정리해서 담아두기 2. 지금까지 해왔던 대외 활동들 → 거기서 뭘했고, 뭘 느꼈는지에 대해서 정리해둘 필요가 있음 3. 내가 할 수 있는 것들 → 중국어, 영어, 하다 못해 볼링, 프로그래밍 언어 까지 깔끔하게 정리할 수 있도록 4. 디자인 → 최대한 깔끔하게 , 단순하게 내용을 .. 2021. 7. 3.