본문 바로가기

전체 글

(55)
코루틴 채널 개념 및 예제 개념 채널은 코루틴을 연결해 주는 파이프 라인이다. 송신측 채널에서 send를 해서 데이터를 전해줄 수 있고 수신측 채널에서는 receive를 통해 데이터를 받을 수 있다. ex) fun main() { runBlocking { val channel = Channel() launch { for (i in 0 until 10) { channel.send(i) } } repeat(10) { println(channel.receive()) } println("end") } } 출력) 0 1 2 3 4 5 6 7 8 9 end 기본 사용법 send나 receive가 suspension point이고 서로에게 의존적이기 때문에 같은 코루틴 내에서 사용할 경우 무한 대기가 이루어 짐으로 코루틴 내에서 launch ..
백준 1915 코틀린 일반적인 dp 문제와 다르게 점화식을 세워 푸는 풀이보다는 메모 라이징 특성을 이용하여 푸는 문제이다. 현재 좌표에 값이 1일 때 좌표의 왼쪽, 왼쪽 위, 위에 값이의 최솟값이 1이라면 2x2의 정사각형을 만들 수 있고 1의 값을 2로 대체해 주면(메모 라이징) 해당 좌표의 왼쪽, 왼쪽 위, 위에 값이 1이라는 사실을 알 수 있다. 이런 식으로 왼쪽, 왼쪽 위, 위에 값이의 최솟값이 2이라면 3x3의 정사각형을 만들 수 있다. ex) 0111 0122 0123 ex) 0011 0112 0122 따라서, 현재 좌표의 값이 1일 때 왼쪽, 왼쪽 위, 위에 값의 최솟값에 1을 더한 값이 현재 좌표에서 만들 수 있는 최대 크기의 정사각형이므로 좌표들의 값들 중 최댓값을 출력하면 정답이 된다. import kot..
백준 2579 계단 오르기 코틀린 https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net fun main() { val n = readLine()!!.toInt() val arr = IntArray(n+1) { 0 } val dp = Array(n+1) { IntArray(3) { 0 } } for (i in 1 until n+1) { arr[i] = readLine()!!.toInt() } dp[1][1] = arr[1] for (i in 2 until n + 1) { dp[i][1] = max..
백준 1005 코틀린 위상정렬이라는 개념을 몰라 시간 초과로 실패한 문제다. 위상정렬은 단반향에(개수는 상관x) 순서가 정해진 문제에 사용된다. 보통 선행 정점을 가지지 않는 정점들을 q에 넣어 해당 정점이 가르키는 정점들을 순서로 진행 하는 알고리즘이다. fun main() { val t = readLine()!!.toInt() for (i in 0 until t) { val input = readLine()!!.split(" ") val n = input[0].toInt() val rules = Array(n + 1) { ArrayList() } val priceInput = readLine()!!.split(" ").map { it.toInt() } val degree = Array(n + 1) { 0 } for (j ..
광고 정책 위반으로 앱 삭제 대응 위와 같은 내용의 메일을 받아서 앱이 게시 삭제 되었었다. 광고가 포함된 activity 내에 startActivityForResult를 사용하는 코드를 정책위반으로 간주하여 해당부분을 수정하여 배포하니 해결되었다.
코틀린 코루틴 개념 및 기본 사용 용도 정의 1. 개념 기본 개념은 하나의 스레드가 하나의 작업을 하는 것 과는 달리 하나의 스레드가 하나의 작업만을 사용하는게 아니라(delay등의 일시정지등을 통해) 유기적으로 하나 혹은 다른 작업들을 실행 ex) 네트워크 작업등을 처리하는데 있어서 스레드가 서버의 응답을 마냥 기다리기만 하는게 아니라 기다리는 동안 다른 작업을 처리함 2. Coroutine Context CoroutineContext는 일련의 다음 요소를 사용하여 코루틴의 동작을 정의합니다. Job: 코루틴의 수명 주기를 제어한다. CoroutineDispatcher: 적절한 스레드에 작업을 전달한다. (2.1 디스패처) CoroutineName: 디버깅에 유용한 코루틴의 이름이다. (CoroutineName을 설정하여 디버깅 등에 이용가능 e..
백준 1202 코틀린 처음에 떠오른 방법은 정렬 후 그리디로 풀려고 했지만 시간초과가 나왔다. 시간초과 없이 해결하기 위해서는 트리 구조와 같은 우선순위 큐나 객체 참조 해쉬등을 이용하여 풀어야 되는 걸 알았지만 왜 그런지 오기가 생겨 처음 방법으로 계속 풀다가 계속 실패하고 결국 우선순위 큐를 이용하였다 ㅠ https://www.acmicpc.net/problem/1202 보석과 가방을 무게순으로 정렬한 다음 각 가방의 무게보다 같거나 작은 배낭을 value값 기준의 우선순위 큐에 넣어주고 이중 가장 값어치가 높은 보석을 꺼내 sum에 더해 준다.(가방에는 한개의 보석만 가능함으로) 그리고 우선순위 큐에 남아있는 보석들은 (가방을 무게순으로 정렬했기 때문에 다음 가방에 넣을 수 있는) 다음 추가되는 보석들과 같이 우선순위큐..
백준 1043 코틀린 완전 탐색과 유니온 파인드 두가지 이상의 방식으로 풀이 가능한 문제이다. 제일 먼저 떠오른게 완전 탐색인데 dfs로 풀려면 각 참석자가 참가한 파티나 같이 파티를 참석한 사람들의 정보가 필요하여 그냥 while문과 set contains(big O (1))를 이용하여 완전 탐색 하여 구연하였다. fun main() { val first = readLine()!!.split(" ") val m = first[1].toInt() val second = readLine()!!.split(" ") val set = HashSet() var count = 0 val parties = ArrayList() val visited = arrayOfNulls(m) for (i in 1 until second.size) ..