코드스테이츠 - 3회차 백엔드 부트캠프 110

2022.09.29 목 - 순열, 조합

📄 학습내용 알고리즘에서 자주 사용되는 수학적 개념 최대공약수(GCD) : 공약수 중 가장 큰 수(공약수 : 두 수의 공통된 약수) 유클리드 호제법 A>B인 두 자연수 A, B가 주어졌을 때, a%b = r이라고 한다면 A, B의 최대공약수 GCD(A, B)는 다음과 같다. 이때 r=0 일 때 B가 GCD(A, B)의 값이다. GCD(A, B) = GCD(B, r) // 재귀 - 최대공약수 int GCD(int A, int B) { if(A%B == 0) return B; return GCD(B, A%B); } // 반복문 - 최대공약수 int GCD(int A, int B) { while(B != 0) { int r = A%B; A = B; B = r; } return A; } 최소공배수(LCM) : ..

2022.09.28 수

⭐ 공부 난이도 그리디 알고리즘 문제 풀기 ☆☆☆☆★ 🌕 느낀점 코플릿 1번 문제에서 최대 2개까지 담을 수 있다는 조건을 보지 못해서 문제를 다시 풀게 되었다. 진짜 문제를 자세히 읽어야겠다. 그래서 그리디로 문제가 풀리지 않아서 왜 그런지 계속 생각하다가, 이유가 조건을 제대로 읽지 않아서 그런 것이었다. 조건을 잘못 읽어서 힘들게 푼 것 빼고는 문제 난이도는 그렇게 높은 편도 아니었고, 양도 많지 않았다. 하지만 4번에 너무 시간을 쏟아서 시간을 효율적으로 쓰지 못했다. 전략적으로 문제를 풀어야겠다.

2022.09.27 화 - 의사코드, 시간 복잡도, 탐욕 알고리즘

📄 학습내용 알고리즘(Algorithm) 알고리즘 : 문제를 해결하는 최선의 결과을 구하는 것 단계 문제 이해하기 문제의 설명, 입출력, 제한 사항, 주의 사항 등 숙지하기 전략 세우기 문제 해결에 적합한 알고리즘 선택하기 의사코드 작성하기 코드 작성하기 의사코드(pseudo code) 의사코드 : 일상적인 언어로 코드의 동작이나 논리를 작성하는 것 의사코드를 구체적으로 작성해야하는 이유 : 코드 작성 시 실행에 문제 없이 동작 가능 장점 시간 단축 디버깅 용이 프로그래밍 언어를 모르는 사람과 소통 가능 좋은 의사코드 특징 자신만의 원칙 세우기 일관성 다른 사람이 이해 가능해야 함 작성방법 자연어 자연어 + 프로그래밍 언어 시간 복잡도(time complexity) 시간 복잡도 : 입력값(N)에 따른 연..

2022.09.26 월 - 연결 리스트, 해시 테이블, 힙트리

📄 학습내용 연결 리스트(Linked List) 연결 리스트 : 값와 다음 노드의 주소를 가진 하나의 노드들이 선형적으로 이어진 자료구조 구조 : 노드들이 흩어진 공간에 위치함 특징 쉽고 빠른 노드의 추가 및 삭제 : 시간 복잡도 : O(1) 특정 노드의 값을 찾기 위해서 최대 전체 순회 필요 : 시간 복잡도 : O(N) head node : 연결 리스트의 첫번째 노드 사용하는 경우 삽입 및 삭제가 빈번히 일어나는 경우 동적 기억장소 관리(dynamic storage managemnet) : 필요한 메모리만 할당 걸비지 컬렉션(Garbage Collection) 해시 테이블(Hash Table) 해시 테이블 : 해시함수으로 생성된 해시를 키와 데이터를 저장하는 위치로 사용한 자료구조 인자가 키(key)인..

2022.09.23 금 - 그래프, 트리, 이진탐색트리, BFS/DFS

📄 학습내용 그래프(Graph) 여러 정점들을 간선으로 연결해서 관계를 표현한 자료구조 구조 직접적인 관계 : 두 정점이 하나의 간선으로 연결된 관계 간접적인 관계 : 두 정점이 여러 개의 간선으로 연결된 관계 표현 방식 인접 행렬 정점의 인접한 상태를 표현한 2차원 배열 사용 : 두 정점 사이의 인접 관계 확인, 가장 빠른 경로(shortest path) 구할 때 ex) int[][] edges = new int[][] { {0, 0, 1}, {1, 0, 1}, { 1, 0, 0 } }; 인접 리스트 정점의 인접한 상태를 리스트로 표현 메모리를 효율적으로 사용하고 싶을 때 ex) int[][] edges = new int[][] { { 1, 2 }, { 3 }, { 0, 1 }, { } }; 용어 정점..

2022.08.22 목 - Stack & Queue

📄 학습내용 자료구조 자료구조 : 여러 데이터를 저장하고 다루는 방법 데이터(data) : 모든 자료의 값들 이러한 데이터를 가공해야 가치가 있음 상황에 필요한 자료구조를 사용해서 문제 해결 가능 Stack 스택(Stack) : 데이터를 순서대로 쌓아서 역순으로 사용하는 구조 특징 LIFO(Last In First Out) 또는 FILO(First In Last Out) 하나의 입출력 방향(제한적 접근) 하나의 데이터만을 입출력 가능 구조 top : 마지막에 들어온 요소 push : 데이터 넣기 pop : 데이터 빼기 구현 - Stack 데이터 타입 이용 Stack stack = new Stack(); Queue 큐(Queue) : 데이터를 순서대로 쌓아서 사용하는 구조 큐의 종류 선형큐(Linear Q..

2022.09.21 수 -JSON

📄 학습내용 JSON JSON(JavaScript Object Notation) 데이터 교환을 위한 객체 형태의 포맷 JSON과 JavaScript의 차이 존재 키와 값 사이의 공백 존재 X 데이터 송수신 가능 조건 수신자와 발신자가 같은 프로그램 사용 범용적인 형태의 데이터 송수신 → 대표적인 형태 : JSON 직렬화(serialize) : 객체를 범용적인 형태(JSON)으로 변경하는 과정 JSON in Java 자바에서 JSON으로 변환된 객체 타입 : 문자열(String) 구현 : jackson 라이브러리의 ObjetMapper 클래스 ObjectMapper mapper = new ObjectMapper(); // TEXT 형식 // null, boolean, String, 배열, HashMap 등..

2022.09.20 화 - 재귀

📄 학습내용 재귀함수 재귀(recursive) : 문제를 작은 문제로 나누고 이 작은 문제를 해결을 통해서 문제를 해결하는 방식 재귀함수 : 자기 자신을 호출하는 메서드 장점 코드 간결 및 수정 용이 변수 사용 횟수 감소 단점 직관적인 코드 흐름 파악이 어려움 proccess stack에 지역변수, 매개변수, 반환값 저장 → 많은 메모리 사용 복귀할 때 컨텍스트 스위치 비용 발생 사용하는 경우 작은 문제로 나눌 수 있는 경우 중첩된 반복문이 많거나 중첩 횟수 예측이 어려운 경우 변경 가능 상태(mutable state)를 제거해서 오류 발생 가능성을 줄이는 경우 모든 재귀 함수 → 반복문 표현 가능 재귀함수 작성 재귀함수의 입출력 정의 재귀함수 : 입력 → 출력 기준 설정 및 문제 분해하기 기준 : 입력..

Section1 회고

Section01. 마무리 백엔드 부트캠프를 시작한 것이 엊그제 같은데 벌써 1달이 지났다는게 믿기지 않는다. 부트캠프에 붙어서 이때까지 하던 생활을 정리하고 정말 공부에만 전념한게 1달이 흐르면서 많은 것을 배웠다. 기술적인 부분 뿐만 아니라 인생에 대해서도 영향을 많이 미쳤다. 1학기에 휴학을 하고 계획도 없이 무기력하게 알바를 하고 목표도 없는 삶을 살다가 부트 캠프에 붙어서 모든 알바를 정리했다. 그래서 혼자서 생각할 수 있는 시간을 많이 하게 되었고 덕분에 자기 개발할 시간이 많이 늘었다. 비록 돈은 없지만... 돈보다 큰 가치를 얻었다. 뭔가 가치관이나 생각이 바뀐 것 같다. 미래에 대한 막연한 불안함, 남들에 비해서 뒤떨어져 있다는 느낌 등을 받으면서 예전에는 살아갔지만 지금은 하루하루를 충..

2022.09.19 월 - 기술면접

📄 학습내용 기술면접 질문 질문1. static 키워드에 대한 설명 및 사용 static 키워드는 메모리를 공유하기 위해서 사용하는 키워드입니다. static 키워드로 선언된 필드, 메서드, 이너 클래스는 메모리의 메서드 영역에 저장되어서 객체를 선언하지 않고 사용 가능합니다. 여러 객체들끼리 하나의 공유되는 자원을 이용하기 위해서 사용합니다. 질문2. 자바 접근 제어자의 특징과 종류 객체지향 프로그래밍에서 핵심 중 하나인 캡슐화를 구현하기 위해서 자바에서는 접근 제어자를 사용합니다. 자바 접근 제어자에는 private, default, protected, public이 있습니다. private로 선언된 것은 선언된 클래스 내부에서만 사용 가능합니다. default는 접근 제어자를 선언하지 않은 경우로,..