![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3SQem%2Fbtr5Tm5Jj8d%2F4Wr3m3cNteBZwMWDCW7QRK%2Fimg.jpg)
Map 자료구조 Map은 Key, Value(키 - 값)를 정의할 때 쓰이는 자료구조입니다. 파이썬의 딕셔너리, JSON을 떠올리면 쉬울 텐데요. Key를 통해 Value에 접근하거나 검색, 수정, 삭제 등 접근을 할 수 있으며, Key를 통해 접근하므로, Key는 중복이 불가능하며, Value는 중복이 가능합니다. Map 사용법 fun main() { val map = mapOf("키1" to "값1", "키2" to "값2", "키3" to "값3") map["키1"] = "값2" // 에러 발생 val map2 = mutableMapOf("키1" to "값1", "키2" to "값2", "키3" to "값3") map2["키1"] = "값2" // 가능 // MapOf로 생성 시, 자료형 생략 가능..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr5LZA%2Fbtr6oH0VTwD%2FnIYKZyLW8HBjVknfi8upi1%2Fimg.jpg)
코틀린에서는 자주 사용하는 자료구조들을 모아 정의해놓은 컬렉션 프레임워크(Collection Framework)를 지원합니다. 자바 프로그래머들에겐 굉장히 익숙한 녀석이죠? 처음 들어보시나요? 사실 이 시리즈를 따라오신 분들이라면 이미 사용해본 경험이 있으실 겁니다. List, ArrayList, LinkedList 등의 List도 컬렉션 프레임워크의 일종이거든요. List는 이미 한 번 다뤄봤으니, 컬렉션 삼형제의 다른 녀석들인 Set과 Map을 한 번 볼까요? 집합 (Set) Set은 집합입니다. 수학시간때 배운 기억을 더듬더듬 꺼내봅시다… 집합은 일반적으로 중복을 허용하지 않으며, 순서가 없습니다. List의 경우, 중복을 허용하며 순서 역시 유의미한데 비해, Set의 경우는 집합이며, 중복을 허용..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F45tVa%2Fbtr5TqMJzC2%2FZj6ibht7eUs2IVu1mJqyd0%2Fimg.png)
https://www.acmicpc.net/problem/26517 26517번: 연속인가? ? 실수 $t$에 대하여, 함수 $f(x)$가 $x=t$에서 정의되어 있고, $\lim_{x \rightarrow t} f(x) = f(t)$인 경우 "$f(x)$는 $x=t$에서 연속이다"라고 한다. 함수 $f(x) = \begin{cases}ax+b & (x \leq k)\\ cx+d & (x > k)\end{cases}$가 주 www.acmicpc.net 난이도 : 실버 5 태그 : 수학, 미적분학 설명 x = t에서, 두 함수가 서로 연속인지 판단하는 문제입니다. f(x) = ax + b, f(x) = cx + d 이므로, 단순히, at + b와 ct + d가 서로 같은 값인지 판단하면 됩니다. 소스코드 ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7zkLH%2Fbtr5RRX9ClY%2F2HY1rS1YL78D3hQEWSu8ak%2Fimg.png)
https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 난이도 : 실버 5 태그 : 수학, 다이나믹 프로그래밍, 조합론 설명 서쪽과 동쪽의 다리를 서로 잇는 문제입니다. 항상 양쪽 다리 개수가 같거나, 강 동쪽이 다리가 더 많으므로, 단순히 오른쪽 다리 m개 중 왼쪽다리 개수 n만큼을 고르는 조합으로 볼 수 있습니다. 즉, mCn 으로 볼 수 있겠네요. 소스코드 fun main() = with(System.`in`.bufferedReader()) { ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fra9dg%2Fbtr53GnTRh2%2FLfko4894N425nQR10E1rr1%2Fimg.png)
https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 난이도 : 실버 3 태그 : 그리디 설명 그리디 알고리즘을 통해 풀 수 있는 문제입니다. 현재의 주유소보다 다음 주유소가 더 효율이 좋다면, 무조건 다음 주유소로 이동하는게 효율적입니다. 따라서, 현재 주유소보다 효율이 좋은 주유소를 탐색한 후, 해당 주유소까지 이동할 기름만 충전한 후, 해당 주유소르 이동합니다. 소스코드 import java.util.* fun main() = w..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx1GRS%2Fbtr53EDBeZm%2FmhT6jKYwpk2vIIyWkqWNt0%2Fimg.png)
https://www.acmicpc.net/problem/15921 15921번: 수찬은 마린보이야!! 기댓값 E(X)의 정의는 ‘각 사건이 벌어졌을 때의 이득과 그 사건이 벌어질 확률을 곱한 것을 전체 사건에 대해 합한 값’이다. 다시 말해, 어떤 수 x가 수열에 등장할 확률 P(x) = (x의 등장 횟수) / www.acmicpc.net 난이도 : 브론즈 4 태그 : 수학 설명 연습기록이 주어졌을 때, (연습 기록들의 평균값) / (연습 기록들 중 하나를 균일한 확률로 뽑을 때의 기댓값) 을 구하는 문제입니다. 이게 무슨소리지..? 하면서 두 세번은 읽어봤습니다.연습 기록 중 하나를 균일한 확률로 뽑았을 때의 기댓값..? 이게 평균이랑 뭐가 다르지? 네. 다를 거 없었습니다.평균값 / 평균값은 항상 ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE0wag%2Fbtr5NycQg3b%2FXIpgRtxlpI0eKSdtkAe6E1%2Fimg.jpg)
익명 함수 (Anonymous Functions) 익명 함수란, 이름처럼 익명, 즉 이름을 가지지 않는 함수를 의미합니다. // 익명함수 val sum = fun(x: Int, y: Int): Int { return x + y } fun main() { println(sum(1, 2)) } // 출력 >>> 3 익명함수는 위와 같이 이름없이 정의되는 함수입니다. 앞서 (1)편에서 언급했듯이, 함수는 일급객체이기 때문에 변수에 할당이 가능합니다. 자바스크립트에서 많이 본 형태이죠? 저는 JS를 별로 안다뤄본 탓에 익숙해지는데 조금 걸렸습니다. fun main() { val testP2 = ::testPrintln testP2() } fun testPrintln() { println("Hello World!..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX1sWe%2Fbtr5HpnyQ2i%2FU5K1Nb7PXqTray2EEiUPmk%2Fimg.jpg)
함수형 프로그래밍 (Functional Programming) 함수형 프로그래밍이란? 데이터 처리를 위해 수학적 함수의 계산으로 취급하고, 가변 데이터를 멀리하며 부수효과를 줄인 일종의 프로그래밍 패러다임이다. 이러한 함수형 프로그래밍은 무엇을 하는지 선언하는 형식에 가깝다 하여 선언형 프로그래밍이라고도 합니다. 기존의 절차적/객체지향 프로그래밍은 무엇을 할 지 명령한다 하여 명령형 프로그래밍이라고 하죠. 함수형 프로그래밍은 과정보다는 결과를, 어떻게(How) 할 지 보다는, 무엇(What)을 할 지에 포커스를 둡니다. 최신의 언어들 (Scala, Swift, Python)은 함수형 프로그래밍을 지원하며, Kotlin 역시 함수형 프로그래밍을 지원합니다. 자바는 자바 8버전부터 함수형 프로그래밍을 지원하..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAfhBs%2Fbtr5scncQgH%2FoNZ1f5ARdPbAicWZk6P32K%2Fimg.jpg)
스코프 함수 (Scope Function) 스코프 함수(Scope Function)란, 객체의 컨텍스트 내에서 코드 블록을 실행하는 것이 유일한 목적인 여러 함수들 입니다. 개체에서 스코프 함수를 호출하면 람다식으로 임시 범위(스코프)가 형성되며, 이 범위에서는 개체 이름 없이 개체에 액세스할 수 있습니다. 스코프 함수의 종류에는 let, run, with, apply, also가 있습니다. 무슨 말인지 잘 모르겠죠? 사실 저도 첫 문단을 어떻게 작성해야 하나 고민하다가, The Kotlin standard library contains several functions whose sole purpose is to execute a block of code within the context of an ob..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl8ITB%2Fbtr5d3Lwg8P%2F8dESbocHWWpOa51eT2Fz4k%2Fimg.jpg)
오류(Error) 오류는 프로그래밍을 하다 보면 정말 수도 없이 마주칩니다. 예기치 못한 동작을 하거나, 의도하지 않게 동작하거나, 심지어 프로그램이 아에 종료될 수도 있습니다. 대표적인 오류 상황이 뭐가 있을까요? 길이가 3인 배열의 10번째 원소를 접근한다면? fun main() { val arr = arrayOf(1, 2, 3) arr[10] = 12345 } // 에러 메시지 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3 at PracticeKt.main(Practice.kt:7) at PracticeKt.main(Practice.kt) 길이가 3인 배열이지..