분류 전체보기
-
선형자료구조 - 스택알고리즘/이론 2024. 4. 12. 17:48
📌 스택 1. 후입 선출(Last In First Out; LIFO) 자료구조 - 마지막에 들어온 데이터가 먼저 나가는 구조 2. 데이터가 입력된 순서의 역순으로 처리되어야 할 때 사용 - ex) 함수 콜 스택, 수식 계산, 인터럽트 처리 등 - 함수 콜 스택 : 함수의 내부 함수를 실행하는 전체 로직을 저장하는 공간(fun2 -> fun1 -> main 함수) - 인터럽트 처리 : 로직을 실행하다가 중간에 다른 처리가 필요할 때 사용 (기존 로직을 스택에 저장한 후 중간 처리를 실행한 뒤에 다시 로직 실행) 스택 기본 구조 후입 선출 구조 기본적으로 데이터 추가, 꺼내기, 스택 공간 확인 동작으로 이러우짐 스택 공간 안에 스택 하단(Bottom)과 스택 상단(Top)이 있고, 데이터 삽입(Push)과 ..
-
4월 1주차 회고고찰 2024. 4. 8. 17:10
📌 금주 학습 알고리즘 코딩테스트가 매주 진행되고 있는데, 풀면서도 이전에 학습했던 자료구조와 알고리즘 개념들을 실전에 적용하면서 해결하지 못했던 부분들이 존재했다. 비교적 이론과 개념들은 숙지했다고 생각했으나 실제 코드에 녹여내고 해당 내용들을 끌고와서 알고리즘을 구현해보았으나 주간 코딩 테스트에서 계속해서 오류가 나고, 원하는 출력값을 도출해내지 못한 부분이 있었다. 그래서 문제 풀이 강의를 조금 더 세심하게 직접 타이핑하면서 '백문이 불여일타' 의 심정으로 Practice 문항들을 다시 복기하는 과정을 거쳤다. 2주차도 계속해서 동일하게 진행할 예정이다. 📌 리마인드 내용 주어진 정수 배열에서 중복된 숫자 쌍의 개수를 계산하는 문제 import java.util.*; class Solution { ..
-
선형자료구조 - 연결 리스트알고리즘/이론 2024. 4. 4. 11:29
📌 연결 리스트 1. 데이터를 링크로 연결해서 관리하는 자료구조 2. 자료의 순서는 정해져 있지만, 메모리상 연속성이 보장되지 않음 장점 데이터 공간을 미리 할당할 필요 없이 빈 공간에 할당해도 됨 리스트의 길이가 가변적이기 때문에 데이터 추가 / 삭제 용이 (메모리 관리 측면) 단점 연결 구조를 위한 별도 데이터 공간이 필요 배열은 인덱스를 통해 바로 데이터에 접근이 가능했으나 연결리스트는 다음 연결해야하는 데이터를 링크로 연결해서 그 링크에 대한 공간이 필요 연결 정보를 찾는 시간이 필요 (메모리 상 연속된 위치가 아니라면, 접근 속도가 상대적으로 느림) 데이터 추가 및 삭제 시 앞뒤 데이터의 연결을 재구성하는 작업 필요 노드 데이터 저장 단위, 값과 포인트로 구성 포인터 : 다음 노드나 이전 노드의..
-
백엔드 개발자가 쌓아야 하는 역량은? - 자료구조/알고리즘/코딩테스트편고찰 2024. 4. 3. 09:21
📌 개발자에게 자료구조와 알고리즘이 왜 필요한지 1. 문제 해결 능력 현업 실무에서 문제 해결 능력이 중요한 순간들을 다양하게 경험했다. 그 중 하나는 데이터베이스 성능 최적화 문제였다. 웹 애프리케이션에서 실시간 데이터 표출을 해야하는데 약 11초 지연되는 것을 확인하였고, 서버 DB 쿼리 성능이 저조한 것을 발견했다. 사용자가 증가함에 따라 응답 시간이 길어지는 문제가 발생하였고, 비즈니스에 부정적인 영향을 미치고 있었다. 문제를 해결하기 위해 먼저 데이터베이스 쿼리 인터페이스 코드를 분석하고, 실행 계획을 확인했다. 그 결과 인덱스를 적절하게 활용하지 못하여 성능이 저하되고 있음을 발견했다. 이를 해결하기 위해 쿼리를 최적화하고 인덱스를 추가하는 등의 작업을 진행한 결과 쿼리 응답시간이 11초에서 ..
-
선형자료구조 - 배열알고리즘/이론 2024. 4. 1. 17:36
📌 배열 1. 많은 수의 데이터를 다룰 때 사용하는 자료구조 2. 각 데이터를 인덱스와 1:1 대응하도록 구성 3. 데이터가 메모리 상에 연속적으로 저장 장점 인덱스를 이용하여 데이터에 빠르게 접근 가능 단점 데이터의 추가 / 삭제가 번거로운 편 미리 최대 길이를 정해서 생성해야함 가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성 데이터 삭제 시 인덱스를 유지하기 위해 빈 공간을 유지해야함 1차원 배열 int[] arr = {1, 2, 3, 4, 5}; for(int item : arr) { System.out.println("item = " + item); } // item = 1 // item = 2 // item = 3 // item = 4 // item = 5 arr[1] = 10..
-
앞으로의 백엔드 공부 계획 (feat. 백엔드 공부법)고찰 2024. 3. 28. 08:34
📌 개발 학습 계획 1. 목표 설정하기 현재 백엔드 스쿨에서 제공해주는 권장 가이드라인이 있다. CS 지식부터 프로그래밍 언어인 Java, 버전관리인 Git, 기본 프레임워크인 Spring Boot, 객체 관계 매핑을 도와주는 JPA, 도커, Security, Spring Batch 까지 교육과정 로드맵이 구성되어 있다. 권장 가이드라인은 시작점이자 말 그대로 가이드라인일 뿐, 주어진 과제와 학습량을 완수한 것만으로 만족감을 취할 생각은 아니다. 개발자를 '무한 성장하는 객체' 라고 바라보는 시점을 갖고 있는데, 입사 후에 가이드라인은 제공받지 못한다. 수동적으로 짜여진 계획표를 실천하는 것에서 벗어나 스스로 성장할 수 있는 동력과 방향성을 스스로 설정하는 연습을 지금부터 해야할 것이다. 현업에서 스스로..
-
백엔드 커리어 로드맵 - 어떤 백엔드 개발자가 되고 싶은지고찰 2024. 3. 21. 12:53
📌 백엔드 로드맵 🔸 프로그래밍 언어와 데이터베이스(DB) 백엔드를 비롯한 개발의 출발점은 프로그래밍 언어와 데이터베이스에 대한 이해 내가 구축(사용)하고자 하는 서비스에 부합하는 혹은 직군에서 제일 많이 사용되는 언어를 학습 선택한 언어에 대해 깊이 있는 이해를 바탕으로 데이터베이스와의 상호작용, 데이터 모델링 등을 학습 🔸 프레임워크와 라이브러리 및 개발툴 활용 프레임워크 및 여러 개발툴 등은 백엔드 개발자의 생산성을 높여준다. 예로 들면, Java는 Spring, Node.js는 Express 등 프레임워크를 사용하여 데이터베이스와의 상호작용, RESTful API 구축, 보안 등을 학습 버전 관리(Git)과 협업 도구(Jira, Slack) 등을 활용하는 방법도 중요 🔸 클라우드 기술 현재 백엔드..