🚀 시작점에 대해 모든 언어가 그렇듯이 그 시작 포인트가 있다. C 계열 int main(void){ print("Hi") return 0; } JVM 계열 class main{ public static void main(String[] args){ System.out.println("Hello world!"); } } 이는 실행시 메모리를 할당하고 프로세스 종료시에 같이 종료됨을 의미한다. 때문에 모든 언어가 프로세스를 실행하는 목적으로 시작점을 가지고 있다. 🌠 자바의 시작점 처음 JAVA를 배우는 경우 Hello, World를 출력하기 위해 다음과 같은 스크립트를 보게된다. 핵심은 System.out.println() 이지만 중요한 것은 쓰레드를 실행하기 위한 main() 이다. 물론 초기 초보 개..
목표 앞뒤가 똑같은 숫자를 확인해보자 Palindrome 변수 타입에 상관없이 변수를 역전후 초기값과 비교하면된다. 반복문을 사용하여 ex) x =123; int temp => 3 -> 30 + 2 -> 300 + 20 + 1 요런식으로 계산하면 된다. class Solution { public boolean isPalindrome(int x) { if(xnum){ num=num*10+temp%10; temp/=10; } // System.out.println(ans); return ((num==temp) || (num/10)==temp); } } Linked List 문제는 어떻게 접근할까? Linked List 문제의 경우에는 내부 변수가 Integer 타입이며 만일 Integer 범위에서 벗어나는 ..
목표 이건 공부해도 모르겠더라 BackTracking 백트래킹 알고리즘이 모든 경우의 수 brute force와 비슷해서 이해를 못하는 듯 하다. 누가 정리한 백D브 차이 백트래킹 vs DFS 백트래킹은 이미 지나쳐온 곳을 다시 돌아가서 다른 가능성을 시도해보는 걸 반복하는 기법으로, 반드시 DFS만으로 가능하지 않고 BFS등으로도 가능한 기법이다. 즉, 정리를 하자면 백트레킹은 하나의 문제 해결 방법론이고 이러한 백트레킹을 구현하는 방법론 중 하나가 DFS이다. 백트래킹 vs 브루트포스 브루트 포스는 모든 경우의 수를 탐색하는 문제 해결 방법론이다. 이와 달리, 백트래킹은 단계마다 조건을 충족하는지 검사하여 조건을 충족하는 경우에만 계속해서 탐색한다. 즉, 정리를 하자면 브루트포스 모든 가지를 탐색하는..
Spanning Tree 그래프 내의 모든 정점을 포함하는 트리를 의미 n개의 정점을 가지는 그래프의 간선의 수 (n-1)로 이루어져 있다. DFS, BFS을 이용하여 그래프에서 신장 트리를 찾을 수 있으며 하나의 그래프에는 많은 신장 트리가 존재할 수 있다. Spanning Tree는 트리의 특수한 형태이므로 모든 정점들이 연결 되어 있어야 하고 사이클을 포함해서는 안된다. 따라서 Spanning Tree는 그래프에 있는 n개의 정점을 정확히 (n-1)개의 간선으로 연결 한다. 최소 신장트리 (MST) Spanning Tree 내에서 노드간의 간선의 합이 값이 최소인 트리를 의미한다. MST Algorithm 을 구현하는 방법은 4가지가 존재한다. 크루스칼 알고리즘 위상 정렬 알고리즘 다익스트라 알고리..
Longest Increasing Subsequence(LIS) 최장 증가 부분 수열(Longest Increasing Subsequence) 문제는, 주어진 수열에서 오름차순으로 정렬된 가장 긴 부분수열을 찾는 문제이다. 여기서의 부분 수열은 연속적이거나 유일할 필요는 없다. 최장 증가 부분 수열 문제는 입력 수열의 길이가 n일 때 O(N^2)의 시간에 풀이가 가능하다. 구현 1. 개념 증가 부분 수열을 만들기 위해서는 2중 loop 문(i, j)으로 순회하면서 하나의 i 이전까지 순열중에서 가장 긴 배열을 선택하면 된다. 모든 index를 순회하면서 각 인덱스의 LIS는 다음과 같다. 최종적으로 위 배열에서 LIS 값은 4 이다. Index(i) arr Index(i) arr i=0 {1} i=4 {..
OOP (Object-Oriented Programming) OOP? OOP는 객체의 관점에서 프로그래밍 하는 것을 의미한다. C언어는 절차 지향 프로그래밍인데, 절차 지향 프로그래밍은 프로세스가 함수 단위로 순서대로 진행되는 것을 말한다. OOP는 절차지향에 비해서 사람의 사고방식과 더 가깝다. OOP는 객체들의 유기적인 관계를 통해서 프로세스가 진행된다. 애플리케이션을 구성하는 요소들을 객체로 바라보고, 객체들을 유기적으로 연결하여 프로그래밍 하는 것을 말한다. OOP 특징 1. 캡술화 객체의 필드, 매소드를 하나로 묶고 , 실제 구현 내용을 감추는 것, 외무객체는 내부 구조를 알지 못하며 객체가 재공하는 필드와 메소드만 이용할 수있다. 필드와 메소드를 보호하는 이유는 외부의 잘못된 사용으로 인해 객..
Parallel Operation 병렬처리? 멀티 코어 환경에서 하나의 작업을 분할해서 각각의 코어가 병렬적으로 처리하는 것을 말하는데, 병령 처리의 목적은 작업 시간을 줄이기 위함. 동시성 VS 병렬성 병렬처리 작업의 방법에는 2가지가 존재하며 멀티스레드 동작 방식 이라는 점에서는 동일하지만 서로 다른 목적을 가지고 있다. 구분 동시성 병렬성 동작 방식 멀티 스레드 방식 목적 멀티 스레드가 작업을 번갈아가며 실행 멀티 코어를 이용한 동시 작업 병렬성의 구사지 옵션(데이터 병렬, 작업 병렬) 데이터 병렬성 : 전체 데이터를 쪼개어 서브 데이터들로 만들고 이 버스 데이터들을 변렬 처리해서 작업하는 것. CPU의 멀티 코어 수만큼 서브 요소들로 나누고, 각각의 서브 요소들을 분리된 스레드에서 병렬 처리 시킨..
Vector vs ArrayList vs LinkedList 특징 List 컬렉션의 하위 목록으로 객체를 일렬로 나열하는 구조이다. 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인텍스가 부여되고 인텍스로 객체를 검색, 삭제 기능까지 가능하다. 1. Vector ArrayList와 동일한 내부구조를 가지고 있느며 선언하는 방식 또한 유사하다. Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드를 실핼 할 수 없고, 하나의 스레드가 완료된 후에야 다음 스레드를 작동 할 수 있다. 즉, 스레드 안정성이 보장이 되는 것이다. 2. ArrayList List 인터페이스의 구현 클래스로 인덱스로 관리한다는 점에서는 배열과 유사하지만 배열 크기가 개변적이라는 점에서 차이를 ..
public static void main(String[] args){} 모든 프로세스는 main() 명령어로부터 시작되는데 이는 main()을 선언 하는 것으로 Thread를 작동시키는 것을의미한다. 그렇다면 String[] args의 의미는 무엇일까? 1. 의미 String[] args 의 문장을 보면 마치 String 배열의 변수를 선언하는 형태와 같다. 이는 초기 도스에서 JAVA를 컴파일 할 경우 > javac HelloWorld.java // java 컴파일 생성 명령어 > java HelloWorld //java 컴파일 실행 입력하면 클래스가 작동되지만 추가적인 입력이 필요한경우 (Scanner , InputStreamReader 선언시) > java HelloWorld 안녕하세요!! hel..
- Total
- Today
- Yesterday
- 매트랩
- Algorithm
- 그래프
- JPA
- 스프링부트
- 스프링
- docker
- interview
- Solid
- 알고리즘
- 수학
- springboot
- 백준
- spring-cloud
- OOP
- kakao
- C언어
- 디자인패턴
- nginx
- CS
- 면접
- ajax
- java
- Spring
- security
- 자격증
- 자바
- 프로그래머스
- 릿코드
- Matlab
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |