전체 글

· KNOWLEDGE
그리디(Greedy) 알고리즘 탐욕스러운 -> 가장 처음의 경우로 만족하면 끝내는 (뒤의 것 신경 쓰지 않는 ) * 동전 금액 맞추기가 쉬운 에제 ✅ Greedy 알고리즘 사용하기 위한 조건 - 탐욕적 선택 속성(Greedy Choice Property) : 현재 선택이 미래 선택에 영향을 미치지 않을 때 - 최적 부분 구조(Optimal Substructure) : 부분의 최적 해가 모이면 전체의 최적해 -> 큰 문제를 작은 부분으로 나눌 수 있고 그 작은 문제들에 대한 최적의 해가 더해진 것이 곧 전체 문제의 최적해가 되는 것(최적 부분 구조 조건) ✅ 정렬 그리디 전략 그리디 전략을 쓰는 이유 - 속도() - 다이나밍 프로그래밍 = 100%최적해를 보장하기 위해 사용 - 100% 최적해를 보장하지 ..
그래프란? 그래프는 정점(vertex)와 간선(edge)의 집합으로 구성된다. 정점은 노드, 간선은 엣지를 말 하며 정점과 정점을 잇는 선을 간선이라고 한다. 그래프는 리스트와 행렬 구조 중의 하나로 구분 가능하지만 실제로는 두 구조의 조합된 형태를 나타낸다. 일반적으로 알고 있는 수학에서의 그래프와는 다른 모양이다. 그래프 종류로는 무방향 그래프, 방향 그래프, 완전 그래프, 부분 그래프, 가중 그래프, 유향 비순환 그래프, 연결 그래프, 단절 그래프 등이 있다. 그래프의 표현 방식 인접 행렬(Adjacency Matrix) 그래프를 행렬로 표현하는 방식 → 정방 행렬을 사용하여 그래프의 정점 간의 연결 관계를 나타냄 인접 행렬은 그래프의 정점(Vertex) 수를 n이라고 할 때, n x n 크기의 행..
Tree구조 Tree의 정의 그래프의 일종으로 비선형 계층적 자료 구조(Hierachical Data Structure)이다. 하나의 루트(root) 노드와 이를 기준으로 한 개 또는 여러 개의 서브트리(subtree)로 구성되어 있다. → 부모 노드와 자식 노드로 구분된다. ✅ 비선형 자료구조란? 한 노드가 여러 개의 노드와 연결되어 있는 형태를 가지는 자료 구조로 각 노드가 선형적인 순서가 아닌 여러 경로를 통해 연결될 수 있음을 의미한다. 대표적으로 트리(Tree), 그래프(Graph), 힙(Heap), 해시테이블(Hash table) 등이 있다. 한 노드에서 시작하여 다른 노드들을 순회하고 자기 자신에게 돌아오는 연결 그래프이다. 아래로 뻗어나가는 구조이기 때문에 사이클이 없다. 트리는 그래프의 ..
· DIARY
재귀함수 / 자기자신을 호출하는 함수 - Base case : 간단히 결과를 반환 - Recursive case : 자기 자신을 호출 int factorial(int i) { if(n == 0) return 1; return n * factorial(n-1); } 함수 실행을 위한 stack 메모리가 추가로 잡힘 void main(String[] args) ... factorial(3) --- factorial(3) ... return 3 * factorial(2); --- factorial(2) ... return 2 * factorial(1); --- factorial(1) ... return 1 * factorial(0); --- factorial(0) ... return 1; --- factori..
· DIARY
💭 목표 상기하기현재 ‘내'가 학습을 통해 이루고자 하는 것은 무엇인가요?여러분이 현재 바라는 목표를 모두 이루었다면 ‘나'는 어떻게 변해 있을까요?‘나'에게서 어떤 모습을 보았을 때, 목표를 이루었다고 말할 수 있을까요? 1. 현재 내가 학습을 통해 이루고자 하는 것?첫 번째 목표는 아무래도 취업이다. 취업을 위해 새로운 것에 도전하고 잘 하기 위해 매일 꾸준히 연습하고 있으니까 말이다. 두 번째는 끈기(의지)기르기. 끈기있게 꾸준히 학습하고자 하는 습관을 들이는 것이 매우 중요하다 생각한다. 내가 개발자를 꿈꾸게 된 이상 책임감을 가지고 열심히 하는 나의 의지를 기르는 것이 나의 목표이다. 이렇게 매일 학습하고 블로깅함으로써 내 습관을 하나 만든 것 같아 좋다. (🔒물론 저번 주는..음..ㅜ) 개발자..
프로세스와 스레드 * 실행중인 어플리케이션(프로그램)을 프로세스 * 실행되는 소스 코드의 흐름을 스레드 프로세스(Process) 실행 중인 application 으로 application을 실행하면 운영체제로부터 실행에 필요한 만큼의 메모리를 할당 받아 프로세스가 됨 프로세스 = 데이터 + 스레드 + 컴퓨터 자원(CPU, RAM, 보조기억장치 등 연산을 위해 필요한 장치) 스레드(Thread) 실행되는 소스 코드의 흐름 스레드 = data + application 자원 → source code 실행 (code 실행흐름) 메인 스레드(main thread) java 에서 가장 먼저 실행되는 메서드는 main 메서드이며 main thread 가 main 메서드를 실행시켜준다. main thread는 main..
· DIARY
어제 오늘 collection framework 기초를 배웠다. 글로만 읽었을 때는 이해가 잘 안 됐는데 문제를 풀면서 이렇게 사용하는 것이구나, 저렇게 사용하는 것이구나 알 수 있었다. 특히 LinkedList 와 ArrayList 부분에 있어 많은 도움이 되었다. 하지만 아직 iterator는 부족한 듯. 그래도 정리를 하니 조금 더 이해가 되는 것 같다. 오늘 새로운 페어 프로그래밍이 시작되었는데 또 새롭다. 문제를 풀고 풀이를 돌아가면서 진행하다 보니 다양한 풀이 방식을 볼 수 있어서 좋았다. 😃 특히 바로 위에 얘기했던 이터레이터 사용과 관련하여 너무 잘 설명해주시고 적용하는 방법도 알려주셔서 쉽게 이해할 수 있었던 시간이었다. 그리고 내가 잘 못 푸는 부분에 있어서 같이 페어로 진행하니 오류도..
컬렉션 프레임워크(Collection Framework) 란? 데이터를 쉽고 효과적으로 처리할 수 있도록 미리 만들어 놓은 클래스의 집합이다. 자료 구조와 알고리즘을 구조화하여 클래스로 구현한 것으로 자바의 인터페이스를 사용해 구현한다. 컬렉션 프레임워크의 주요 인터페이스는 "List, Set, Map"이다. 자바 프레임워크의 상속구조 List 순서가 있는 데이터를 목록으로 이용할 수 있으며 크기가 동적이다. → 배열은 크기를 선언해주면 마음대로 못 바꾸지만 List를 구현하면 크기를 변환할 수 있다. - ArrayList 크기를 동적으로 관리한다. 배열처럼 주소값을 가지고 있지만 주소값이 무작위로 저장된다. 최상위 타입으로 배열을 생성, 복사하기 때문에 요소의 접근에 성능이 좋다. * 삽입, 삭제에는 ..
· DIARY
안히.. 어제는 사실 개요만 보고 예제로 했던 키오스크 참고해서 만들어보다가 버거세트에서 걸렸는데... 어제 하다하다 안되겠다 싶어 뒤에 좀 더 넘겨보니 아예 순서가 있길래.. 하.. 진작에 볼 걸 그랬나 싶어서 그냥 오늘 아침에 처음부터 다시 했다. 아예 다른 방법으로 시작한 버거 주문.. 근데 또 짜증나게ㅜ 흑ㅎ... 버거 세트에서 걸렸다. 아... 진짜 근데 이번엔 오류가 자꾸 나서 뭐가 문제인지도 모르겠다 깃에 올라온 코드랑도 똑같은데 진짜 머리가 빠질 것 같다. 화가 너무 나고 울고싶은데 어떡하지..머리에 쥐가 내린다.. 그래서 더 미치도록 그냥 내가 해결해버리고싶다. 아니.. 자꾸 이럴 수록 뒤에 있는 지문들도 안보고 일단 치고 저걸 해결하고 보자 싶어서 뒤에 것 마저 베껴 쓰게 되는 게 너무..
· DIARY
오늘은 입출력 프로그램을 혼자 만들어보는 시간을 가졌다. 후.. 역시 어제 눈 뜨고 꾸역꾸역 다 보고 자기를 잘 했다는 생각이 들었다. 그리고 오늘도 아침에 끝낸 예제도 한 번 만들어 보고 시작했는데 그래도 쉽지 않았다. 물론 아직도 못 끝낸 상태이다. 맨날 너무 늦게 자서 오늘도 늦게 까지는 몸이.. 못견디려 한다… 현재 프로그램은 버거 세트에서 막혀버린 상태로 못나가고 있다.🫠🫠🫠🫠🫠 하루종일 이것만 보고 있으려니 조금 집중력의 저하가 일어나는 듯 하당ㅋㅋㅋ 원래 몸이 안 좋은 곳이 많은 사람이라 엄마가 맨날 걸어다니는 종합병원이라 하는데 요즘들어 눈도 좀 점점 아프고 잘 안 보이는 것 같은.. 느낌… 그 전에도 분명 하루에 10시간 넘게 컴퓨터를 보고 있었던 것 같은데 왜 유독 요즘에서야 더 그런지..
밝빛솔
밝게빛나는 솔딩