코틀린

문제 https://www.acmicpc.net/problem/2631 2631번: 줄세우기 KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 www.acmicpc.net 문제 풀이 문제는 정말 간단하다. 주어진 순서에서 최소한의 변경을 통해 오름차순으로 정렬하는 문제이다. 접근방법에 대해서 정말 많은 고민을 했었다. 최소한의 변경을 위해서는 기존 배열에서 최대한 고정시켜야 하는 부분을 길게 해야 한다고 이해했다. 그렇다면 고정시키는 번호를 어떻게 정할까? 문제 보기에서만 봐도 움직이는 번호들은 정해져 있는것을 보면 유추할 수 있다. 3 7 5 2 6 1 4 -> 1..
문제 https://www.acmicpc.net/problem/1106 1106번: 호텔 첫째 줄에 C와 형택이가 홍보할 수 있는 도시의 개수 N이 주어진다. C는 1,000보다 작거나 같은 자연수이고, N은 20보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 각 도시에서 홍보할 때 www.acmicpc.net 문제 풀이 처음에 그리디인 줄 알고 접근했다가, 도저히 그리디로 할 수가 없어서 DP로 접근방식을 수정했다. DP문제에서 가장 중요한 점은 DP 배열을 어떤 식으로 설계하느냐이다. 다양한 방법으로 설계할 수 있지만, 문제에서는 최소한의 비용으로 목표 인원수를 모을 수 있느냐에 초점을 맞추기 때문에 DP배열의 index를 비용으로 잡았다. 그 부분이 나중에 최소 비용을 찾기 편하다고 생각했..
문제 https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 문제 풀이 문제가 조금 길어서 요약해 보면 다음과 같다. 궁수의 위치는 N행 즉 주어진 배열 한 칸 아래에 있다. 궁수는 3명이고, 한 칸의 한 명만 있다. 궁수의 사정거리는 D이하이고, 여러명의 궁수가 하나의 적을 공격할 수 있다. 궁수는 반드시 가장 가까운 적을 공격해야하고, 가장 가까운 적이 여러 명이라면 가장 왼쪽의 적을 공격한다. 중요한 점은 하나의 적이 여러 명의 궁수에게 공격받을 수 있다는..
문제 https://www.acmicpc.net/problem/1937 1937번: 욕심쟁이 판다 n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에 www.acmicpc.net 문제 설명 문제 초반에는 단순하게 dfs를 진행해서 최대로 갈 수 있는 칸 수를 기록하면서 진행했다. 골드 3치고 문제가 너무 쉽다고 생각했는데, 34% 정도에서 시간초과가 발생했다. 생각해 보면 당연하다. 최대 배열 크기가 500이고, 500x500을 계속해서 무식하게 탐색하면 시간초과가 나는 건데 왜 이 생각을 못했을까. 그렇다면 수정해야 될 것은 탐색을 하는 범위라고 생각했다..
문제 https://www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net 문제 풀이 대륙간의 연결하는데 필요한 최소한의 비용으로 다리를 건설하는 것이 목표이다. 그렇다면 첫 번째로 대륙을 구별해야 할 것이다. A대륙에서 B대륙으로 다리를 놓기 위해서는 A대륙과 B대륙을 구별해줘야 한다. 다음과 같이 대륙을 구별해 줬다. 어떻게 구별했냐?? 배열이 1인 경우 bfs를 진행하고, 땅을 밟는 경우 라벨링을 해줬다. 그러다가 bfs가 중지되면 라벨을 +1 하고, 다시 땅을 만..
문제 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 문제 설명 일반적인 그래프 탐색문제랑 비슷한 부분이 많다. 조금 다른 점은 벽의 개수를 3개로 제한되어 있다는 점이다. 반드시 3개를 세워서 탐색을 진행한다는 점 말고는 동일하다. 그렇다면 벽 3개를 어디다 배치할지를 결정하면 쉽게 풀 수 있다. 조금 더 효율적인 방법이 있는지는 모르겠지만, 나는 빈칸의 개수를 배열에 저장해서 빈칸의개수빈칸의 개수 * 빈칸의 개수 -1 * 빈칸의 개수 -2 만큼 반복문을..
· Skils/Kotlin
코루틴 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 비동기 vs 동기 예를 들면, 요리를 할 때 동생 같은 요리 초보는 프라이팬을 하나만 사용하면서 요리를 한다. 이러한 방식을 동기라고 한다. 나같은 요리 고수는 프라이팬을 여러 개 사용하면서, 칼질도 하는 등 여러 작업을 동시에 한다. 이러한 방식을 비동기라고 한다. 그렇다면 비동기가 왜 필요할까? 만약 내가 버튼을 누름과 동시에 데이터베이스에서 접근해서 데이터베이스를 읽어 들이는데, 그 데이터베이스를 기다리는 동안 화면 UI는 데이터베이스에서 정보가 들어오지 않았기에, 계속 기다려야 하고, 그렇게 되면 사용자 입장에서는 텅 빈 화면을 바라봐야 한다. 이러한 상황이 발생되면 사용자도 불편하고..
👀결과물 계산 기록을 저장하는 기능은 DB와 관련 있다. 안드로이드 스튜디오에서는 DB를 Room 라이브러리를 사용해서 이용한다. Room에 대한 설명은 이전 포스팅을 보면 알 수 있다. 계산 기록을 보여주는 기능은 시계 모양의 버튼을 누르면 계산 기록을 포함하고 있는 레이아웃이 나타나게 했다. 💻계산기록을 나타내는 Layout 닫기 버튼과 계산 기록 삭제 버튼과 계산 기록을 보여줄 수 있는 화면은 Scrollview를 사용해서 계산 기록이 많더라도 모두 표현할 수 있게했다. 💡우선 Room을 사용하기 위해서는 3가지 구성요소를 만들어줘야 한다. 데이터베이스 클래스 데이터 항목 Dao 📕Dao package com.example.calculator.Dao import androidx.room.Dao im..
저번에 혼자서 만들던 계산기가 DB를 연동해서 계산 기록을 저장하려고 했는데 굉장히 많은 오류가 생겨서 새로 갈아 엎고 구글링을 하면서 코딩을 했다. 너무 슬펐다. 계산기의 디자인은 이렇다.[항상 느끼는 건데 디자인도 진짜 어려운 영역이다. ] 각 버튼의 기능은 계산기를 한 번이라도 써본 사람은 알 거라고 믿고 있기에 설명을 생략한다. 초기 디자인이다. View를 사용해서 1대1로 화면을 나눴다. app:layout_constraintVertical_weight="num" // num:1으로 화면을 나누는 코드이다. 두 개의 textview를 만들어서 각각 input_text와 result_text를 입력받게끔 만들었다. 💻TableLayout 계산기 같이 같은 간격으로 같은 크기의 버튼을 넣어줄 때는 ..
재한
'코틀린' 태그의 글 목록 (2 Page)