본문 바로가기

Kotlin 시작하기...문법편 (1) JAVA 로 안드로이드 앱 개발을 해본 적도 없었으나, Kotlin으로 앱 개발을 !도전! 해본다 ('23. 1/15일 시작) 간단한 문법부터 정리해보자 (필자 스스로 기억하기 위해 작성) // 1. 함수(Function) - void 타입 return fun A() { } // A() : Unit 생략 가능 - int 타입 return fun A(a : Int, b : Int) : Int { return a+b } * 위와 기능 동일 fun A(a : Int, b : Int) = a+b // 2. 변수 (Variable) - val (불변) fun A(){ val tmp : Int = 3 tmp = 4 //(X, 변경불가) } - var (가변) fun A(){ var temp : Int = 3 tem.. 더보기
네트워크 플로우 네트워크 플로우의 기본 정의는 위키에 나와있듯, 'In graph theory, a flow network (also known as a transportation network) is a directed graph where each edge has a capacity and each edge receives a flow. The amount of flow on an edge cannot exceed the capacity of the edge.' 즉, 유향 그래프이고 가중그래프 G 가 각각의 노드를 연결한 에지들의 유량을 통해서 문제를 모델링하는 과정인 셈이다. 실제로, 네트워크 플로우 문제는 직접 봐서는 네트워크플로우로 풀어야 하는건가? 라고 알 수 있을 만큼 직관적이지 않다. (물론 내공이 쌓이면.. 더보기
이분탐색 'N개의 배열안에 특정 M이라는 숫자가 존재하는지 알아내라' 라는 문제를 처음 봤을 때,단순히 "배열 인덱스를 하나씩 증가하면서 탐색하라는 거 아닌가?" 라고 생각할 수 있다. 하지만, 백준 1920 번 문제 https://www.acmicpc.net/problem/1920 와 같이 찾고자 하는 수의 범위가 크고, 배열의 크기 또한 큰 경우 시간초과가 날 수 있다. 이 경우 쿼리가 M개, 배열이 최대 N개 이기 때문에 O(NM) 이 발생하여 시간초과. 즉 다른 방법을 찾아보아야 한다. 이때, 방법을 절반을 나누어가면서(이등분) 탐색하는 건..? 이라는 접근을 통해 풀이해볼 수 있으며, 방법은 다음과 같다. 1) 배열을 우선 오름차순으로 정렬한다. 2) 현재 배열의 중심(MIDDLE) 을 파악한다. 3) .. 더보기