전체 글

전체 글

    Kotlin 코틀린의 기본 문법

    Kotlin 코틀린의 기본 문법

    기본 문법 1. 알고 넘어가기 클래스 이름 => 파스칼 표기법 (모든 단어를 대문자로 시작한다) ex) ClassName 함수 , 변수 => 카멜 표기법 (첫 단어만 소문자로 시작한다.) ex) functionName 2. 변수의 선언 1. var 일반적으로 통용되는 변수로써 언제든지 읽기 , 쓰기가 가능하다 2. val 선언시에만 초기화가 가능하고, 중간에 값을 변경할 수 없다. val a:Char = 'a' val name:String = "홍길동" val age:Int = 20 val score3:Long = 10L val score:Double = 10.0 val score2:Float = 10.0f 3. Null값을 허용하는 변수와 허용하지 않는 변수 val age:Int = 20 val mon..

    [백트래킹] 백트래킹의 설명과 간단한 예제풀이

    [백트래킹] 백트래킹의 설명과 간단한 예제풀이

    백트래킹(Backtracking) 1. 백트래킹이란? 백트래킹은 알고리즘 기법 중 하나로, 재귀적으로 문제를 하나씩 풀어가면서 현재 재귀를 통해 확인 중인 노드(상태)가 제한된 조건에 위배되는지 판단하고, 만약 해당 노드가 제한된 조건을 위배한다면 그 노드를 제외하고 다음 단계로 나아가는 방식이다. 가장 중요한 점은 제한조건을 위배한다면 그 노드를 제외한다는 점이다. 백트래킹은 현재 상태에서 다음상태로 가는 모든 경우의 수를 찾아서 이 모든 경우의수가 더 이상 유망하지 않다고 판단되면 이전의 상태로 돌아가는 것을 말한다. 여기서 더 이상 탐색할 필요가 없는 상태를 제외하는 것을 가지치기(pruning)라고도 한다. 따라서 한마디로 정의하면 DFS를 통해 모든 노드를 깊이 우선 탐색을 하면서 더 이상 필요..

    [BFS] BFS의 설명과 간단한 예제풀이

    BFS(너비 우선 탐색 , Breadth First Search) 1. 특징 1. BFS는 재귀적으로 동작하지 않는다. 2. 이 알고리즘도 DFS와 마찬가지로 그래프 탐색의 경우 방문한 노드에 대해 기존에 방문했었는지의 여부를 검사를 해야 무한루프에 빠지지 않는다. 3. BFS는 방문한 노드들을 차례대로 저장한 후 먼저 방문한 노드부터 먼저 꺼낼 수 있는 자료구조인 큐를 사용합니다. (선입선출이 원칙!!) 4. 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이 방법을 사용한다. ex) 지구 상에 존재하는 모든 친구 관계를 그래프로 표현한 후 A사람과 B사람에 존재하는 관계 경로를 찾을려면 DFS는 모든 친구 관계를 다 살펴봐야 할수도있는데 BFS는 A와 가까운 관계부터 먼저 탐색함에 따라 ..

    [DFS] DFS의 설명과 간단한 예제풀이

    DFS(깊이 우선 탐색 , Depth-First Search) 1. 특징 1. 자기 자식을 호출하는 순환 알고리즘의 형태를 지닌다. (재귀 or 스택) 2. 이 알고리즘을 구현할 때 가장 큰 차이점은 그래프 탐색의 경우 어떤 노드를 방문했었는지 여부를 반드시 검사해야 한다는 것이다. (이것을 검사하지 않으면 무한루프에 빠지게 된다. ex) visited[idx] = true;) 3. 우리가 미로의 길을 계속 가다가 더 이상 갈 수 없게 되면 우리는 가장 가까운 갈림길(새로운 분기)로 돌아와서 다른 방향으로 탐색을 진행하는 것과 비슷한 양식이다. 4. 모든 노드를 방문하려고 할때 이 방식을 사용한다. 5. BFS(너비 우선 탐색)보다 더 간단하다. 6. 검색 속도 자체는 BFS(너비 우선 탐색)에 비해서 ..

    [그리디 알고리즘] 그리디 알고리즘의 설명과 간단한 코테 예제풀이

    [그리디 알고리즘] 그리디 알고리즘의 설명과 간단한 코테 예제풀이

    그리디알고리즘(Greedy Algorithm) 그리디(Greedy)란 '탐욕스러운, 욕심 많은' 이란 뜻이다. 그리디 알고리즘은 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방식이다. 하지만 순간의 최적의 선택을 한다고 해서 최종적인 해답이 최적이라는 보장이 없다. 따라서 그리디 알고리즘을 적용할 수 있는 문제들은 지역적으로 최적이면서 전역적으로도 최적인 문제들일때 그리디 알고리즘을 적용할 수 있다. 여기서 가장 중요한 점은 그리디 알고리즘을 이용하면 최적해를 찾지 못할 수 도 있다는 것을 항상 명심해야한다. 그렇다면 그리디 알고리즘을 적용하여 최적해를 구할 수 있는 문제는 어떤 조건을 만족할까? 1. greedy choice property : 현재 선택이 이 후의..

    Java 자바의 메모리 구조 (stack , heap , static)

    Java 자바의 메모리 구조 (stack , heap , static)

    자바를 사용함에 있어서 기본적인 메모리 구조 및 특징을 알아야한다. 처음 프로그램을 실행시키면 운영체제가 프로그램을 구동하기 위해서 메모리(RAM)에 데이터 및 명령어를 저장할 공간을 할당하여 준다. 이러한 메모리는 사용할 수 있는 공간이 한정되어 있다. 이러한 것을 어떻게 관리하느냐에 따라서 프로그램의 성능(속도)가 정해진다. 따라서 성능이 좋은 프로그램이란 메모리 관리가 수월한 프로그램을 말한다. 그렇기 때문에 우리는 메모리를 효율적으로 사용하기 위해서 메모리의 구성과 특징에 대해서 정확하게 이해해야한다. 메모리는 크게 stack(스택) , heap(힙) , static(스태틱) 영역 3가지 영역으로 구분된다. static 영역은 method영역이라고도 한다. ---------추가 작성예정

    [브루트 포스] 브루트 포스의 설명과 간단한 코테 예제풀이

    [브루트 포스] 브루트 포스의 설명과 간단한 코테 예제풀이

    브루트 포스(Brute Force) 브루트 포스는 모든 경우의 수를 무식하게 탐색하면서 요구조건을 충족한 결과만 가져오는 것을 말한다. 이 알고리즘의 가장 큰 특징은 모든 영역을 전체 탐색 한다는 점이다. 전체를 탐색하는 방법에서 1. 선형 구조를 전체적으로 탐색하는 순차 탐색 2. 비선형 구조를 전체적으로 탐색하는 깊이 우선 탐색(DFS) , 너비 우선 탐색(BFS)가 기본적인 도구이다. 실제로 알고리즘을 풀때는, 이 문제가 브루트포스로 해결이 가능한지 확인 후 불가능하다면 어떤 알고리즘을 적용해서 시간복잡도를 줄이며 간단하게 짤 것인지 고민해야한다. (DP, 누적합 , 이분탐색 등등) 브루트 포스에 가장 대표적인 예제로 백준 블랙잭 문제가 있다. 2798번 블랙잭 문제 카지노에서 제일 인기 있는 게임..

    Kotlin 코틀린의 object VS companion object

    Kotlin 코틀린의 object VS companion object

    object VS companion object 코틀린은 싱글톤 클래스를 생성하기 위해 object declaration이라는 것을 사용한다. 싱글톤 클래스로 선언해야 할 경우에 클래스 명 앞에 class 대신 object를 사용함으로써 싱글톤 클래스를 생성하게 된다. 하지만 공부를 하다보면 companio object라는 것을 볼 수 있다. object와 companion object는 무엇이 다른지 알아보자. 1. object object는 크게 2가지로 사용된다. 1. object expression (객체 표현식) 2. object declaration (객체 선언) - 동반 객체(객체 선언을 클래스 내부에 사용한 것) 여기서 싱글톤 클래스를 생성하기 위해 사용되는 object의 쓰임은 2번째인 ..