브루트 포스 vs 그리디 알고리즘 (개념, 특징, 문제)

그리디 알고리즘, 브루트 포스(완전 탐색)의 개념, 특징, 예제 문제

“브루트 포스” 알고리즘 이름을 처음 들었을 때는 이름부터 포스가 느껴졌습니다… ㅎ 하지만 한글로는 “완전 탐색” 말 그대로 for 문으로 순회하면서 확인, 연산하는 프로세스를 의미합니다. “브루트 포스 알고리즘”이라는 개념을 몰라도 코딩 기초 과정에서 자연스레 사용했던 알고리즘이였던 것….! 그럼 이런 간단한 알고리즘은 사용하면 안되는 알고리즘일까요? 그리고 그리디 알고리즘은 무엇일까요? 브루트 포스랑 비슷한 알고리즘 일까요? 브루트 포스 (완전 … Read more

파이썬 deque : 큐 (Queue) 개념과 사용법

파이썬 deque

큐는 FIFO(선입선출) 원칙을 따르는 데이터 구조입니다. (“파이썬 deque”가 queue의 일종) 사람들이 줄을 서서 기다리게 queue라고 생각하시면 됩니다. 먼저 도착한 사람이 가장 먼저 빠져나갑니다. 실제로 “queue”는 대기줄을 의미하는 단어입니다. queue에서 요소는 후면(끝)에 추가되고 전면(전면)에서는 제거됩니다. 아래 그림을 확인해주세요. 큐 (Queue)는 언제 사용하는 걸까? 큐 자료구조의 특성에 맞게 시퀀스의 양쪽 끝에서 효율적인 삽입 및 삭제 작업이 중요한 … Read more

Compilation과 Interpretation의 차이점

Compilation과 Interpretation의 차이점 Compilation 컴파일은 프로그램의 소스코드 전체를 기계어나 중간코드로 한번에 번역하는 것을 말합니다. 이 프로세스는 컴파일러에 의해 수행됩니다. 컴파일은 프로그램이 실행되기 전에 발생합니다. 컴파일된 코드는 필요할 때마다 실행할 준비가 되어 있습니다. 컴파일된 코드는 번역이 미리 이루어지기 때문에 실행 속도 측면에서 더 효율적인 편입니다. Interpretation Interpretation이란 프로그램의 소스코드를 기계어로 번역하거나 필요에 따라 한 줄씩 실행하는 … Read more

PyPy : 파이썬 (CPython)과의 차이점

pypy

분명 동일한 파이썬 언어인데 코딩 테스트 사이트를 보면 Python으로 해석하는 게 있고 “PyPy“로 돌리는 게 있습니다. 둘의 차이가 무엇인지 궁금즘이 생겨 공부하게 되었습니다. 다재다능한 프로그래밍 언어인 Python은 단순성과 가독성으로 수많은 애플리케이션을 지원하죠. 그러나 프로젝트 규모가 커짐에 따라 성능 개선의 필요성이 생겨나게 되었습니다. 이에 따라 등장 한 것이 Python용 동적 언어 컴파일러인 “PyPy” 입니다. PyPy란? PyPy는 … Read more

AWS,토스 출신 현직자 커리어 특강 후기

AWS,토스 출신 현직자 커리어 특강 후기

메타코드에서 24.03.11에 있었던 “AWS,토스 출신 현직자 커리어 특강”을 듣고 도움이 될만한 내용을 정리해보았습니다. 데이터 전문가로 직무 전환 소프트웨어 개발에서 전환하기로 한 결정은 주로 불분명한 요구 사항에 뿌리를 둔 문제들로 인해 촉발되었습니다. 프로토타입의 도움을 받아도 모호한 고객 기대와 피드백을 처리하는 것은 좌절감을 안겨주었습니다. 그에 반해 데이터 분석의 분야는 목표를 정량화할 수 있다는 점에서 독특한 매력을 발견했습니다. … Read more

해시 테이블 정리

해시 테이블

“해시 테이블“은 키-값 쌍을 효율적으로 저장하고 검색할 수 있는 강력한 데이터 구조입니다. 체계적이고 매우 빠른 주소록이라고 생각하면 됩니다. 이를 통해 고유 식별자를 기반으로 정보를 빠르게 찾을 수 있습니다. 해싱의 개념 해시 테이블의 핵심은 해싱 개념입니다. 해싱은 저장하려는 각 정보에 대해 고유한 지문을 생성하는 것과 같습니다. 고유 식별자(키) 각 정보에는 키라고 하는 고유 식별자가 있습니다. 예를 … Read more

연결 리스트 : 초보자도 파이썬으로 이해하는 자료구조

연결 리스트

기본적으로 “연결 리스트”는 요소가 노드에 저장되는 선형 데이터 구조입니다. 배열과 달리 연결된 목록에는 연속적인 메모리 공간이 필요하지 않습니다. 대신, 각 요소(노드)에는 데이터와 시퀀스의 다음 노드에 대한 참조(링크 또는 포인터)가 포함됩니다. 노드 연결 리스트는 “데이터 + 포인터”를 포함하는 컨테이너인 노드로 구성되어 있습니다. 데이터: 정수, 문자 또는 기타 데이터 유형과 같이 저장하려는 실제 정보입니다. 다음 포인터: 시퀀스의 … Read more

정적 배열, 동적 배열 : 초보자도 파이썬으로 이해하는 자료구조

파이썬 배열 자료구조

코딩 여정을 시작할 때 자료구조의 기본 사항을 이해하는 것이 중요합니다. 자료 구조란 데이터 구조 + 연산 을 의미합니다. 이번에는 “배열“에 대해 공부한 내용을 정리해보았습니다. 배열에는 배열의 크기를 미리 정하는지 여부에 따라 정적 배열과 동적 배열로 나뉩니다. 정적 배열 Static Arrays 정적 배열이란? 정적 배열은 각 상자에 고유 번호가 붙은 일련의 상자로 생각하면 됩니다. 각 상자에는 … Read more

시간 복잡도, 공간 복잡도 요약 정리

시간 복잡도와 공간 복잡도에 대한 공부한 내용을 정리해 보았습니다. 시간 복잡도 시간 복잡도는 입력 크기가 증가함에 따라 알고리즘의 실행 시간이 어떻게 증가하는지를 측정한 것입니다. Big-O 표기법은 최악의 시나리오에서 알고리즘의 시간 복잡도의 상한을 표현하는 방법입니다. 이는 특정 하드웨어, 상수 요소 또는 하위 항의 세부 사항에 얽매이지 않고 알고리즘의 효율성을 분석하는 데 도움이 됩니다. Big-O는 다음과 같이 … Read more

Git merge : 프로젝트의 변경 사항 통합 (3-way / fast-forward)

git fast forward merge

“Git merge” 명령어는 브랜치를 병합하는 명령어 입니다. 브랜치 병합은 두 개 이상의 브랜치를 하나로 합치는 작업입니다. 주로 기능 개발이나 버그 수정을 별도 브랜치에서 진행한 후, 이를 메인 브랜치에 통합할 때 사용합니다. Git에서 브랜치를 병합하는 방법에는 대표적으로 3-Way merge 방법과 Fast-Forward merge 방법이 있습니다. 두 방식 모두 git merge 명령어로 동작하는데요. branch의 상태에 따라 어떤 방식으로 … Read more