본문 바로가기

야놀자 테크스쿨19

[면접을 위한 CS 전공지식 노트][자료구조] 연결리스트 LinkedList 0. 개요 이전 글에서는 선형 자료구조인 배열의 구조와 Java에서의 ArrayList를 살펴보았다. 이번에는 연결리스트에 대해서 공부한 내용을 글로 정리하여 남기고자 한다. 일단 연결리스트에는 단방향 연결리스트와 양방향 연결리스트가 있다. 이번 글에서는 두 가지 모두에 대해서 구현해보고, 특징들에 대해서 알아볼 예정이다. 1. 단방향 연결리스트 단방향 연결리스트는 말 그대로 한 방향으로만 링크된 리스트들을 의미한다. 즉, 앞에서 뒤로는 탐색이 가능하지만, 역방향으로는 탐색이 불가능하다. 그림으로 살펴보자. 아래 그림과 같이 Head는 다음 노드를 가리키고 있고, 0번 노드는 1번 Tail을 가리키고 있다. 그러나 Tail에서 0번 노드의 주소는 알지 못하기 때문에 역방향의 탐색이 불가능하다. 2. 양방.. 2023. 8. 2.
[면접을 위한 CS 전공지식 노트][자료구조] Array(배열)와 ArrayList 0. 개요 JAVA에서는 배열을 직접 사용할 수도 있고, 배열을 사용하기 쉽게 구현해놓은 ArrayList가 존재한다. 자료구조를 공부하면서 이 부분에 대해서 정리하여 기록하고자 이 글을 작성한다. 1. Array 배열이라는 자료구조의 특징을 살펴보면, 1. 선형적인 자료구조이다. 2. 데이터를 일렬로 늘여놓은 형태이다. 3. 물리적으로도 데이터가 메모리에 연속적으로 저장된다는 특징을 가지고 있다. 4. 같은 데이터 타입만을 저장할 수 있다. -> 다른 데이터 타입을 저장하고자 한다면 class 선언을 하여 객체를 이용하여 사용할 수 있다. 등을 이야기 해볼 수 있겠다. Java를 이용해 프로그래밍을 하는 경우 종종 배열을 직접 사용하는 경우도 있지만, 대부분의 경우 배열을 사용하기 쉽게 구현해놓은 Ar.. 2023. 8. 2.
[면접을 위한 CS 전공지식 노트][자료구조] 자료구조에 따른 시간 복잡도 0. 개요 프로그래밍을 하면서 알고리즘의 효율을 측정할 수 있는 지표로는 크게 시간 복잡도와 공간복잡도가 있다. 알고리즘이 메모리를 얼마나 쓰는지 나타내는 것이 공간복잡도이고, 알고리즘이 문제를 해결하는데 걸리는 시간이 시간복잡도 이다. 과거에 하드웨어의 스펙이 좋지 않았을 적에는 이 두 가지 모두를 고려하면서 프로그래밍을 진행했지만, 최근 하드웨어의 성능이 좋아지고 나서부터는 공간복잡도 보다는 시간복잡도를 고려하여 프로그래밍을 하는 추세인 것 같다. 또한 시간복잡도와 공간복잡도는 트레이드오프 관계에 있다. 최근은 하드웨어 성능이 좋아짐에 따라 시간복잡도를 기준으로 알고리즘의 효율을 많이 측정하는 추세다. 그러므로 이 글에서는 공간복잡도 보다는 자료구조와 시간복잡도에 대한 것을 중점적으로 정리해 볼 계획.. 2023. 7. 31.
[JAVA][자료구조] Java에서 Stack을 사용하는 방법 대해 알아보자! 0. 개요 코딩테스트를 준비하면서 Stack이라는 자료구조를 사용하게 되었는데, Java에서는 어떠한 형식으로 Stack을 사용할 수 있게 제공해주는지, 어떤 메서드를 제공해주는지 정리하고자 이 글을 작성한다. 1. Java에서 제공해주는 Stack Queue와는 다르게 Java에서 Stack은 클래스로 구현이 되어 사용할 수 있게 제공해준다. 잠깐 예전에 정리했던 Queue에 대해서 복기를 해보자면, Queue 같은 경우 new LinkedList()를 통해 생성하여 인터페이스에 해당하는 메소드를 사용했지만, Stack같은 경우 new Stack()으로 객체를 생성하여 스택을 사용할 수 있다!! Stack은 Vector를 상속받아서 구현되어 있는 것을 아래 사진을 통해 확인할 수 있다. 그리고 초록색으.. 2023. 7. 17.
[JAVA][자료구조] JAVA Queue 사용법. 0. 개요 코딩테스트를 준비하면서 필요한 java 자료구조와 메서드에 대해서 정리하고자 이 글을 남긴다. 나 같은 경우에는 평소에 queue를 사용해본적이 거의 없기 때문에 어렴풋이 queue가 java에서는 인터페이스로 구현되어 있는다는 사실을 알고만 있을 뿐 이었다. 이번에 코딩테스트를 준비하면서 queue를 사용할만한 문제가 나와서 이번기회에 java에서 queue에 대한 메서드를 정리하고 이해하려고 이 글을 작성한다. 1. JAVA에서 구현된 queue 메서드 이 글을 읽는 분들은 큐라는 자료구조에 대해서 이해가 있을 것이라고 생각한다. 선입선출의 대표적인 자료구조로써 많은 곳에 사용된다. 자! 그럼 자바에서 queue는 어떻게 구현해놓았는지 살펴보자! 먼저 서두에서도 이야기 했듯이 자바에서는 큐.. 2023. 7. 16.
[Git] git 구조에 대해서 알아보자! 0. 개요 git은 어떻게 버전관리를 하는지 git을 학습하면서 궁금해졌고, Git에 관련된 강의를 들으면서 Git이 어떻게 버전관리를 하는가에 대해서 마침 개념설명을 들었기에 머릿속에 좀 더 오래 남겨두기 위해 이 글을 작성한다. 1. Working Derectory - Index - Repository 구조. 일단 깃의 원리를 알기 전에 필수로 알아야 하는 것이 있다. 바로 Working Directory(work tree), Index(Staging Area), Repository이다. 아래 그림을 보자. 최초에 "git init"을 입력하게 되면 .git 파일이 생기면서 해당 디렉토리는 Working Directory가 되고 Index와 Repository라는 가상 저장공간이 생긴다. (가상공간은.. 2023. 7. 15.
[Git] revert conflict 문제 0. 개요 git 명령어를 가지고 놀다가 revert에서 굉장히 신기한 현상을 발견하였다. 그래서 이 내용을 기록해두고자 이 글을 적는다. 1. 문제와 시도 1번 문제. 일단 각각의 버전은 아래와 같다. 1 버전: a.txt를 만들어 hi라는 텍스트를 쓰고 저장. 2 버전: a.txt를 열어 hello라는 텍스트를 추가하고 저장. 3 버전: a.txt를 열어 say ho라는 텍스트를 추가하고 저장. 한 상황이다. 이제 revert를 이용해 1버전을 revert하려고 한다. 과연 성공할 수 있을까? 정답은 X이다. 충돌이 발생한다. 2번 문제. 일단 각각의 버전은 아래와 같다. 1 버전: a.txt를 생성하고 저장. 2 버전: b.txt를 생성하고 저장. 3 버전: c.txt를 생성하고 저장. 한 상황이다.. 2023. 7. 12.
[Git] Git 정리 0. 개요 수업의 커리큘럼의 시작은 Git이었다. 개발자 중에 Git을 모르는 개발자는 없을 것이라고 생각한다. 그런데 내가 지금까지 Git이 왜 필요한지에 대해서 생각해본적이 있었던가? 왜 필요한지에 대해서 생각하지 않고, 무작정 다른사람도 사용하니까 따라서 사용했던 것 같다. 과거에 나를 반성하면서 Git이 세상에 나오게 된 이유는 뭘까? 이 질문으로 이 글을 시작할까 한다. (뭔가 불편하니까 나왔겟죠?) 1. Git이 나온 이유 아마 Git 이전의 개발세계의 난이도는 매우 매우 난이도가 높았을 것이라고 생각한다. 물론 버전에 대한 이력관리는 하고 있었겠지만, 협업하여 개발 완료 후에 소스코드를 합치는 비용, 그리고 버전 관리를 하는 비용은 지금보다는 높았을 것이라고 생각한다. Git 없이 협업을 했.. 2023. 7. 12.
[Git] Linux 명령어 정리. 0. 개요 오늘은 산뜻한 2일차. 오늘 부터 본격적으로 실시간 강의와 더불어 학습을 시작했다. 우리들의 커리큘럼 첫 시작은 Git 부터 시작했다. Git을 배우는데 왠 Linux 명령어를 정리하냐고 의아해하시는분들도 계실 것이다. 그! 러! 나! 절대로 Git과 Linux 명령어는 무관하지 않다. Git을 CLI 환경에서 능수능란하게 사용하기 위해서는 자주 쓰는 Linux 명령어는 손에 숙달되어야 한다. 그렇지 않으면 필요할 때마다 ChatGPT에게 질문하거나, 구글링을 해야하므로 시간이 많이 든다. 자 잡설은 집어치우고 오늘 배운 Linux 명령어에 대해서 간략히 정리 해 보고자 한다. 1. 기본적인 Linux 명령어 1) ls - list segments의 약자 ls. 아주 습관 처럼 사용되는 명령어.. 2023. 7. 11.