본문 바로가기
반응형

코딩테스트/알고리즘11

파이썬 Python | 알고리즘 | ⭐⭐⭐⭐ ArrayList ⭕ 파이썬 Python | 알고리즘 | ⭐⭐⭐⭐ ArrayList➡️ ArrayListArrayList는 배열과 유사한 자료 구조입니다. 배열은 데이터가 연속적으로 저장된다는 점에서 ArrayList와 차이가 있지만, 이해를 돕기 위해 배열과 유사하다고 생각할 수 있습니다. 알고리즘 문제에서는 배열의 삽입과 삭제가 빈번히 일어나므로 시간 복잡도와의 싸움이 자주 발생합니다. 따라서 삽입이나 삭제를 시간 복잡도를 고려하지 않고 무작위로 수행하면 문제를 해결하지 못할 수 있습니다.ArrayList의 특징연속된 메모리 공간: ArrayList는 연속된 메모리 공간에 데이터를 저장합니다.원하는 위치의 값 얻기: 특정 위치의 요소에 접근할 때 O(1)의 시간 복잡도를 가집니다.삽입 및 삭제: 중간에 요소를 삽입하거.. 2024. 6. 13.
파이썬 Python | 알고리즘 | 카카오 개발자 코딩테스트 및 오픈채팅방 알고리즘 ⭕ 파이썬 Python | 알고리즘 | 카카오 개발자 코딩테스트 및 오픈채팅방 알고리즘카카오의 핵심은 카카오톡입니다. 카카오의 신입 공개 채용 코딩 테스트 문제는 대학교 학부 과정에서 배우는 기초 알고리즘에 충실하지만, 문자열 기반 채팅 애플리케이션인 카카오톡은 카카오의 핵심인 만큼 문자열과 관련된 알고리즘이 항상 출제됩니다. ➡️ 2020년 카카오 개발자 신입 공개 채용 1차 1번 오픈채팅방 문제[프로그래머스 문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42888)문제 설명카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있으며, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있습니다. 신입사원인 김크루.. 2024. 6. 12.
파이썬 Python | 알고리즘 | 시간 복잡도 ⭕ 파이썬 Python | 알고리즘 | 시간 복잡도컴퓨터는 1초에 약 1억 정도의 연산을 할 수 있다고 가정합니다. ➡️ 알고리즘이 왜 필요한가?구글 검색엔진을 예로 들어보겠습니다. 우리가 구글을 통해 검색할 때, 전 세계에서 업로드된 모든 게시물을 검색 키워드와 비교하여 찾으려 한다면 수백 초 이상의 시간이 걸릴 것입니다. 하지만 실제로 구글과 유튜브는 검색창에 키워드를 입력했을 때 빠르면 1초 안에, 느려도 몇 초 안에 검색 결과를 보여줍니다. 이는 효율적인 알고리즘 덕분입니다. 이러한 이유로 대기업에서는 개발자를 채용할 때 알고리즘 시험을 보며, 개발자들에게 있어서 알고리즘은 필수적인 기술입니다. ➡️ 그래서 구글 검색 엔진은?구글의 검색 알고리즘은 비밀에 부쳐져 있지만, 실무적인 개발 이야기로 추.. 2024. 6. 12.
파이썬 Python | 알고리즘 | Greedy algorithm(그리디 알고리즘, 탐욕법) ⭕ 파이썬 Python | 알고리즘 | Greedy algorithm(그리디 알고리즘, 탐욕법) 현재 상황에서 가장 좋아 보이는 선택을 연속적으로 하여 최종적인 해결책에 도달하는 방식 문제를 해결하기 위해 순간마다 가장 최선의 선택을 해나가며, 각 단계에서의 선택이 그 이후의 선택들에게 제약을 주지 않는 방향으로 진행되어야 함 정당성 분석: 반드시 그 선택이 실제로 최적해에 도달할 수 있다는 것을 증명하는 정당성 분석이 필요함 ➡️ 조건 탐욕스러운 선택 조건(Greedy Choice Property): 우리가 한 선택이 다음 선택과 나머지 문제 해결에 영향을 주지 않고, 그 선택이 최종적으로 최적의 해결책을 가져다 줄 수 있다는 것 최적 부분 구조 조건(Optimal Substructure): 큰 문제를.. 2024. 3. 9.
파이썬 Python | 알고리즘 | Coding Test 준비 ⭕ 파이썬 Python | 알고리즘 | Coding Test 준비 문제 해결 역량(알고리즘 및 자료구조)에 관한 학습 기록 레퍼지토리 자주 사용하는 알고리즘 코드를 라이브러리화 ➡️ 사용 언어 변경: Java에서 Python으로 2024년 03월 06일부터 Python을 주 사용 언어로 전환함 다양한 프로그래밍 언어에 대한 학습 욕구 특히, Python은 풍부한 라이브러리 지원으로 알고리즘 학습에 집중하기 용이(예시, 문자열 처리가 다른 언어에 비해 간결하고 쉬움) 따라서, 다양한 상황에 능동적이고 쉽게 대응 가능 ⭕ 학습 계획 ➡️ 알고리즘 개념 학습 학습 내용: 그리디, 구현, DFS, BFS, 정렬, 이진 탐색, 다이나믹 프로그래밍, 최단 경로, 그래프 이론 등 학습 자료: 나동빈님의 YouTube.. 2024. 3. 9.
자바 Java | 알고리즘 | 배열 ⭕ 자바 Java | 알고리즘 | 배열 배열은 동일한 자료형의 데이터를 일렬로 나열한 자료구조입니다. 각 요소는 인덱스를 통해 접근할 수 있습니다. 배열은 프로그래밍에서 매우 일반적으로 사용되며, 메모리 상에서 연속된 공간에 요소를 저장합니다. ➡️ 배열의 특징 인덱스를 사용하여 값에 바로 접근할 수 있다: 배열은 각 요소마다 고유한 인덱스가 있으므로, 해당 인덱스를 사용하여 배열 내의 요소에 직접 접근할 수 있습니다. 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다: 배열의 특정 위치에 새로운 값을 삽입하거나 삭제하려면, 해당 위치 이후의 모든 요소를 이동시켜야 합니다. 이는 성능상의 문제를 유발할 수 있습니다. 배열의 크기는 선언할 때 지정할 수 있으며, 변경할 수 없다: 배열을 선언.. 2024. 3. 6.
자바 Java | 알고리즘 | 자료구조(Data Structure) - 배열(Array) 리스트(List) ⭕ 자바 Java | 알고리즘 | 자료구조(Data Structure) - 배열(Array) 리스(List) 두 가지 주요 자료구조인 배열과 리스트는 각각의 특징에 따라 적절한 상황에서 선택되어 사용됩니다. ➡️ 배열(Array) 배열은 연속된 메모리 공간에 값을 저장하는 자료구조입니다. 각 원소는 고유한 인덱스를 가지고 있어 해당 인덱스를 통해 직접 참조할 수 있습니다. int[] numbers = {1, 3, 5, 7, 9}; 배열의 특징 인덱스를 통한 직접 접근: 배열은 각 원소가 고유한 인덱스를 가지므로, 해당 인덱스를 사용하여 빠르게 값을 접근할 수 있습니다. 값의 삽입 및 삭제 어려움: 새로운 값을 삽입하거나 삭제할 때 주변의 값을 이동시켜야 하므로 연산이 복잡합니다. 예를 들어, 두 번째 값.. 2024. 1. 10.
자바 Java | 알고리즘 | 디버깅 ⭕ 자바 Java | 알고리즘 | 디버깅 디버깅은 프로그래밍 과정에서 코드의 논리 오류를 찾아내고 수정하는 중요한 단계입니다. 모든 프로그래머는 실수를 할 수 있으며, 이러한 실수는 코드의 논리 오류로 나타날 수 있습니다. 특히 자바와 같은 언어에서는 디버깅이 더욱 중요한데, 여기에는 몇 가지 핵심적인 이유가 있습니다. 첫째로, 코드 작성 시 실수는 불가피합니다. 논리적인 오류는 문법적인 오류와 달리 컴파일러가 감지하지 못하므로 실행 중에 발견되어야 합니다. 그리고 디버깅을 통해 이러한 오류를 찾아내고 수정할 수 있습니다. 둘째로, 많은 프로그래머들은 문법을 배우는 과정에서 디버깅을 가볍게 여기곤 합니다. 그러나 실제로는 디버깅이 코드 작성 과정에서 필수적인 스킬이며, 특히 코딩테스트를 응시할 때 디버깅.. 2024. 1. 9.
자바 Java | 알고리즘 | 시간복잡도 ⭕ 시간복잡도 시간 복잡도는 알고리즘 선택의 주된 기준 중 하나로, 주어진 문제를 해결하는 데 필요한 연산 횟수를 나타냅니다. 코딩테스트에서는 1억 번의 연산을 1초로 가정하며, 주어진 시간제한 내에 문제를 해결할 수 있어야 합니다. 시간제한이 2초인 경우 최대 2억 번의 연산 안에 답을 도출해야 합니다. ➡️ 시간 복잡도 유형 시간 복잡도는 주로 빅오(O), 빅세타(Θ), 빅오메가(Ω) 세 가지 유형으로 나뉩니다. 빅오(O): 알고리즘의 최악의 경우 시간 복잡도를 나타냅니다. 이는 주어진 입력 데이터에 대해 알고리즘이 최대로 소요될 수 있는 시간을 표현합니다. 코딩테스트에서는 주로 빅오를 고려하여야 합니다. 특히 TEST SET이 복잡하게 나오는 상황에서는 항상 최악의 경우를 염두에 두고 알고리즘을 선.. 2024. 1. 8.
자바 알고리즘 | IMOS 알고리즘을 활용한 구간 중첩 최대값 찾기 ✅ IMOS 알고리즘 시작점과 끝점이 주어진 구간을 처리하는 데 유용한 알고리즘이다. 각 지점에서의 변경 값을 저장하고 누적하여 계산함으로 가장 중첩되는 영역을 구할 수 있다. 쇼핑몰의 판매 기록을 분석하여 특정 기간 동안 가장 많이 판매된 상품의 수량을 구한다. 판매 기록을 날짜별로 분류하여 날짜마다 판매된 상품 수량을 저장한다. 7월 1일부터 7월 3일까지의 구간에서 가장 많이 판매된 상품의 수량을 구하려고 한다. 7월 1일부터 7월 3일까지의 판매량의 누적 합을 구하고 가장 큰 값을 찾으면 된다. 이처럼 구간 중첩 문제를 해결하는 데에 유용한 알고리즘이다. 다양한 문제를 효율적으로 해결할 수 있다. 💡 IMOS 알고리즘 시간 복잡도 입력 데이터의 개수 N과 구간의 개수 M에 선형적으로 비례한다. 전.. 2022. 9. 23.
자바 알고리즘 | 코딩테스트에서 필수적인 시간 복잡도 개념과 활용 방법 최근 자바 공부를 다시 시작하면서 알고리즘 문제를 해결하려고 노력하고 있다. 그러나 여러 문제에서 런타임 에러가 발생하는데, 특히 중첩 for문을 사용하는 경우에 많이 발생한다. 이러한 문제를 해결하기 위해서는 시간 복잡도를 공부하고, 효율적인 알고리즘을 설계하는 방법을 배워야 한다. 시간 복잡도를 이해하면, 같은 문제를 더 효율적으로 해결할 수 있다. ✅ 시간 복잡도 알고리즘이 처리하는 입력 크기와 실행 시간 간의 상관관계를 나타낸다. 알고리즘이 입력 크기에 따라 처리하는 데 걸리는 시간의 증가율을 나타내는 지표이다. 입력 크기와 실행 시간 간의 상관관계를 분석하여 알고리즘의 성능을 평가할 수 있다. 이를 통해 더 효율적인 알고리즘을 설계하고, 불필요한 자원 낭비를 방지할 수 있다. 💡 시간 복잡도 조.. 2022. 9. 19.
반응형