본문 바로가기

Kotlin102

[Kotlin, S2] 백준 1912번 연속합 연속합(1912번)Silver 2#다이나믹 프로그래밍https://www.acmicpc.net/problem/1912 문제 내용  문제 접근정수들이 주어지면, 연속된 정수의 합 중의 최댓값을 찾아서 출력한다.시간제한이 1초이고, 정수는 10만 개까지 들어오기 때문에 다이나믹 프로그래밍이 강제된다.이 문제를 다이나믹 프로그래밍으로 풀기 위해서는 어떻게 해야 할까? 입력 예제 1을 예로 들어 보겠다.1010 -4 3 1 5 6 -35 12 21 -1정수를 하나씩 보면서 최댓값을 찾아보자. 첫 번째 수는 10이기 때문에 연속된 수의 합은 10이다.두 번째 수는 -4이다. 연속된 수의 합은 6이다. 6과 -4중에 6이 더 크다.세 번째 수는 3이다. 연속된 수의 합은 9이다. 9와 3중에 9가 더 크다.네 번째.. 2024. 8. 26.
[Kotlin, S2] 백준 2716번 원숭이 매달기 원숭이 매달기(2716번)Silver 2#자료 구조 #트리 #스택 문제 내용  문제 접근입력은 오직 대괄호만 주어진다. 대괄호가 있으면 덩굴이 2개로 분리되는 것이다.각 덩굴에는 동일한 수의 원숭이가 있어야 한다.덩굴은 2개로만 나누어질 수 있다.위 문제의 그림을 보면 각 덩굴 수에 맞는 원숭이들이 매달려 있다. 첫 번째 덩굴의 원숭이 수는 각 덩굴에 4마리씩이다(2+ 2, 1 + 1 + 2).오른쪽의 덩굴의 원숭이 수는 각 덩굴에 2마리씩이다(1 + 1, 2).각 덩굴의 depth가 깊어질수록 필요한 원숭이의 수가 2배씩 늘어나게 된다. 덩굴은 무조건 2개씩으로만 나누어지기 때문에 한 덩굴의 depth가 깊어질수록 다른 덩굴도 깊어진 덩굴의 depth에 따라 늘어난 원숭이 수에 맞게 원숭이를 추가해 줘.. 2024. 8. 25.
[Kotlin] 백준 16506번 CPU CPU(16506번)Silver 5#구현 문제 내용  문제 접근위 표를 참고해서 opcode, rD, rA, rB(#C)가 주어질 때, 문제에 정의된 번역 방법으로 어셈블리어를 번역해서 기계어로 출력한다.각 문제에 필요한 조건들이 뭐가 있는지 정리해 보겠다. 기계어는 총 16개의 0과 1로 이루어져 있다.16개의 수들이 적용되는 조건은 다음과 같다. 1. 0~3번째까지의 수는 opcode에 맞게 구성해 주면 된다. 위 표 참고.2. 4번째 수는 opcode가 C로 끝나면 1, 아니면 03. 5번째 수는 0 고정.4. 6~8번째 수는 rD의 2진수값.5. 9~11번째 수는 rA의 2진수값, NOT의 경우는 0 고정.6.12~15번째 수는 opcode가 C로 끝날 때는 #C의 2진수값, 아니면 rB의 2진수.. 2024. 8. 23.
[Kotlin, S5] 백준 11068번 회문인 수 회문인 수(11068번)Silver 5#수학 #브루트포스 알고리즘https://www.acmicpc.net/problem/11068 문제 내용  문제 접근10진수인 숫자를 입력받을 때, 2진법부터 64진법까지 수를 변환할 때, 변환한 수가 팰린드롬(회문)이면 1을 출력. 아니면 0을 출력하는 문제이다.Kotlin에서 진법 변환을 쉽게 하는 방법은 toString(N), toInt(N)을 쓰는 방법이다.하지만 toString, toInt로 날먹할 수가 없다. 왜냐하면 toString, toInt를 쓰면 아래와 같은 오류가 발생하기 때문이다.Exception in thread "main" java.lang.IllegalArgumentException: radix 37 was not in valid range.. 2024. 8. 23.
[Kotlin, B1] 백준 15629번 Africa Africa(15629번)Bronze 1#구현 문제 내용문제 본문더보기라이언의 고향은 아프리카의 어느 섬이라고 한다. 사자의 서식지는 주로 아프리카의 초원지대로 알려져 있는데, 아쉽게도 아프리카의 섬 중 사자의 서식지 또는 과거에 사자가 서식했던 지역은 없기 때문에 라이언의 고향이 섬이라는 것은 누군가의 착각에 의해 잘못 알려졌을 가능성이 높다. 사실 아프리카 내에 바다로 생각할 만큼 매우 큰 호수가 많아서 섬이었던 걸로 오해했을 가능성도 있다. 아프리카 내의 여러 호수 중 가장 큰 호수는 빅토리아 호로, 동아프리카의 세 나라인 우간다, 케냐, 탄자니아에 걸쳐 있다. 역시 케냐와 탄자니아의 국경에 걸쳐 있는 세렝게티 지역과 거의 맞닿아 있다. 세렝게티는 3만 제곱 킬로미터가 넘는 땅으로 초원 지역과 사바.. 2024. 8. 22.
[Kotlin, S1] 백준 1991번 트리 순회 트리 순회(1991번)Silver 1#트리 #재귀https://www.acmicpc.net/problem/1991 문제 내용  문제 접근입력값을 기반으로 트리를 만들어서 전위, 중위, 후위 순회를 한 결과를 출력해야 한다.트리 문제가 생소한 사람들을 트리를 어떻게 구성해야 하는지부터 난감할 것이다. 내가 그랬다.트리 구성은 문제 본문에 나와 있는 것 그대로 구성해 볼 생각이다.먼저 한 노드의 정보를 표시할 Node 데이터를 구성해 줄 것이다. node에는 value와 left, right 데이터가 존재하도록 구현한다.private data class Node( val value: String, var left: Node?, var right: Node?,)left와 right는 하위 No.. 2024. 8. 21.
[Kotlin, S3] 백준 1904번 01타일 01타일(1904번)Silver 3#다이나믹 프로그래밍https://www.acmicpc.net/problem/1904 문제 내용  문제 접근타일의 구성이 00, 1로 총 2가지가 존재한다. 타일들로 구성해야 하는 자릿수가 N일 때 타일 2종류를 무한대로 사용해서 자릿수가 N인 수를 만들어야 한다.문제 설명에서처럼 N이 4일 때는 0011, 0000, 1001, 1100, 1111 총 5가지의 경우의 수가 존재한다. 먼저 N의 개수에 따라 경우의 수가 몇 개인지 일일이 세서 알아내 보자.위의 표는 자릿수(N)에 따른 00, 1로 나타낼 수 있는 N자리의 수들을 나열한 것이다.어떤 규칙이 보이게 된다.바로 피보나치수열과 동일한 규칙으로 개수가 증가하는 것을 볼 수 있다.N이 3이 될 때부터 피보나치수열을 .. 2024. 8. 20.
[Kotlin, S3] 백준 1002번 터렛 터렛(1002번)Silver 3#수학 #기하학 #많은 조건 분기https://www.acmicpc.net/problem/1002 문제 내용  문제 접근입력 형식을 보면 터렛의 좌표와 마린과의 거리가 나온다. 이를 이용해 원을 이용하는 문제임을 유추할 수 있다.입력 예제 1의 첫 번째 case를 확인해 보자.0 0 13 40 0 37첫 번째 터렛의 좌표가 0, 0이고 마린과의 거리가 13이므로 반지름이 13인 원이라고 생각하면 된다. 첫 번째 터렛을 기준으로 다음과 같이 원을 구성하면 원의 둘레에 해당하는 부분들이 모두 마린이 있을 수 있는 경우의 수인 것이다.두 번째 터렛도 구성해 보자. 두 번째 터렛은 좌표가 40, 0이고 마린과의 거리는 37이다. 두 번째 원은 다음과 같이 구성된다. 그럼 첫 번째 .. 2024. 8. 20.
[Kotlin, S3] 백준 1004번 어린 왕자 어린 왕자(1004번)Silver 3#수학 #기하학 문제 내용  문제 접근시작 좌표와 끝 좌표가 주어지고, 행성계의 중심 좌표와 행성계의 반지름이 주어질 때, 시작 좌표에서 끝 좌표로 이동하면서 진입 또는 이탈하는 행성계의 개수를 구해야 한다.행성계는 반지름과 중심 좌표가 주어진다. 시작 좌표와 행성계의 중심좌표 간의 거리와 끝 좌표와 행성계의 중심 좌표 간의 거리를 이용해 해당 행성계를 무조건 지나야 하는지 아니면 안 지나가도 상관없는지 알 수 있다.  시작 좌표와 행성계의 중심 좌표 간의 거리를 distanceStart, 끝 좌표와 행성계의 중심 좌표 간의 거리를 distanceEnd라고 할 때행성계와 시작, 끝 좌표 간의 관계가 3가지가 나올 것이다. distanceStart와 distanceEnd.. 2024. 8. 19.
[Android] RecyclerView의 Infinite scroll 적용하기 (2) 내일배움캠프 앱 개발 심화 팀 프로젝트  서론대부분의 API들은 수많은 검색결과를 불러와야 할 때, 한 번에 불러오는 게 아닌, page query 파라미터를 추가로 이용해서 조금씩 데이터를 불러오도록 처리한다.이런 형식으로 데이터를 불러오는 이유는 많은 데이터를 여러 페이지로 나누어서 로딩 속도를 개선하고 사용성을 좋게 하기 위해서이다.이는 기본적인 내용이긴 하지만 그냥 써봤다. page 파라미터로 나뉘어 있는 검색결과들을 Android에 무한 스크롤을 적용해서 끝없는 데이터를 계속 불러올 수 있도록 만들어 보자.  무한 스크롤무한 스크롤은 우리가 자주 사용하는 instagram, youtube처럼 스크롤을 계속 내려도 데이터가 계속 나오는 것을 뜻한다.무한 스크롤을 구현하기 위해서는 첫 데이터가 re.. 2024. 8. 19.
[Kotlin, S3] 백준 2346번 풍선 터뜨리기 풍선 터뜨리기(2346번)Silver 3#자료 구조 #덱https://www.acmicpc.net/problem/2346 문제 내용  문제 접근입력 순서대로 풍선 안에 들어있는 종이에 적혀 있는 숫자가 입력으로 주어지고, 종이에 입력된 수만큼 이동해서 다른 풍선을 터뜨려야 한다. 종이의 숫자가 양수면 다음 번호 방향으로 움직이고, 음수면 이전 방향으로 움직인다. 터진 풍선에 쓰인 종이는 재사용하지 않는다.입력 예제 1을 예로 들어 보면53 2 1 -3 -11번째 풍선인 종이에 3이 적힌 풍선을 터뜨렸으면, 양수이기 때문에 4번째 풍선을 터뜨려야 한다. 4번째 풍선은 음수이기 때문에 왼쪽 방향으로 이동한다. 2까지 이동했으면 2번 이동한 것이다. 2 이전의 값인 3은 이미 터져서 사용했기 때문에 이 때는 .. 2024. 8. 19.
[Kotlin, S5] 백준 30010번 잘못된 버블정렬 잘못된 버블정렬(30010번)Silver 5#애드 혹 #해 구성하기https://www.acmicpc.net/problem/30010 문제 내용  문제 접근위 문제에 잘못된 방식으로 구현된 버블 정렬 함수가 있다.이 함수를 이용해 버블 정렬을 했을 때, 올바르게 정렬되지 않는 리스트를 출력하면 된다. 먼저 버블 정렬이 어떻게 이루어지는지 알아야 한다.버블 정렬은 현재 위치에서 자신의 앞의 값을 확인해서 자신보다 값이 작을 경우 서로의 값을 교환하는 방식으로 구현을 한다.물론 1번의 사이클로는 정렬이 바로 안 되는 경우가 많기 때문에 정렬할 List의 크기만큼 반복해 주면 정렬을 마칠 수 있다. size가 5인 List를 4번의 사이클을 돌아 정렬을 완료한 부분이다.현재 자신의 앞의 값을 확인하고 있기 때.. 2024. 8. 17.
[Android] ViewModel과 UiState를 이용해 상황에 맞는 화면 띄우기 (1) 내일배움캠프 앱 개발 심화 팀 프로젝트 서론이제 본격적으로 부트캠프에서 앱 개발하고 나서 발생한 문제의 해결 과정과 새로 알게 된 기능 정리 및 알고 있던 개념 복습 차원에서 개발 기록 포스팅을 남기도록 하겠다.기능 개발이 끝나고 나서 포스팅을 작성할 것이기 때문에 매일 올라오지는 않는다 :)  UiState란?uiState는 자신이 직접 state를 만들어서 현재 앱이 어떤 상태인지 직접적으로 알 수 있게 해주는 역할을 한다.대체로 UiState는 sealed class를 이용해서 구현한다.sealed class SearchUiState { data class Success(val searchResultModel: SearchResultModel): SearchUiState() data ob.. 2024. 8. 16.
[Kotlin, S5] 백준 1813번 논리학 교수 논리학 교수(1813번)Silver 5#애드 혹 문제 내용  문제 접근입력받는 숫자가 i이면 i개의 말은 참이다라는 뜻이다.i개의 말이 참이 되기 위해서는 i가 2라면 2개의 말이 참이 되어 있어야 한다. 그렇지 않으면 이 문장은 거짓이 된다.다르게 말하면 "정확하게 2개의 문장이 참이다." 라는 말은 입력받은 말들 중에서 2개만 참일 때만 참이 된다. 그러므로, 입력값(i)의 빈도 수가 같은 경우는 참이 되게 된다.하지만 고려해야 할 사항이 있다. 모순(-1)인 경우와 모순이 아니지만 참이 하나도 없어서 0인 경우이다.-1인 경우는 입력 예제 2의 경우이다.10위의 경우에는 "정확하게 0개의 문장이 참이다." 라고 말하는 문장이 1개가 있다고 말하기 때문에 모순적이다라고 하는 듯하다. 정답이 0인 경우.. 2024. 8. 16.
[Kotlin, S3] 백준 15649번 N과 M(1) N과 M(1)(15649번)Silver 3#백트래킹 문제 내용  문제 접근백트래킹을 이용해 해결 가능하다.완전탐색으로도 해결할 수 있지만 백트래킹을 쓰는 게 공부에 도움이 될 것 같다. 1부터 n까지의 자연수 중 중복 없이 m개를 고르는 모든 경우를 출력한다.백트래킹의 개념부터 간단하게 이야기하겠다. 백트래킹은 일자로 쭉 내려가다가 정답이 아님이 확실시되면 이전으로 돌아와서 다시 다른 경로로 검색을 시작하는 방법이다.간단하게 사진으로 진행 과정을 봐보자. 처음에는 0 -> 1 -> 3으로 이동하면서 탐색한다. 3에 도달하면 더 깊게 들어갈 수 없기 때문에 부모 노드로 다시 이동해서 다른 경로로 재탐색하는 방식이다. 부모 노드로 돌아가는 방법은 자식까지 dfs로 특정 깊이까지 들어가고 나면 저장하면서 방문.. 2024. 8. 13.
[Kotlin, 내일배움캠프] 공부일지(2024-08-12) 오늘 공부한 내용 정리(2024년 8월 12일)  코드카타 문제풀이뱀 사다리 게임(Gold 5, 16928번)https://rkdrkd-history.tistory.com/193 [Kotlin, G5] 백준 16928번 뱀과 사다리 게임뱀과 사다리 게임(16928번)Gold 5#그래프 이론 #그래프 탐색 #너비 우선 탐색https://www.acmicpc.net/problem/16928 문제 내용  문제 접근1부터 100번째 칸까지 존재하는 뱀과 사다리 게임판이 존재할 때, n개rkdrkd-history.tistory.com   개인 공부팀 프로젝트 UI 구성팀 프로젝트 아이디어 구성 및 UI 구성팀원들과 프로젝트를 하는 주간이 왔다.공통 주제가 youtube 만들기인데 이를 토대로 팀만의 앱을 만들어야.. 2024. 8. 12.
[Kotlin, G5] 백준 16928번 뱀과 사다리 게임 뱀과 사다리 게임(16928번)Gold 5#그래프 이론 #그래프 탐색 #너비 우선 탐색https://www.acmicpc.net/problem/16928 문제 내용  문제 접근1부터 100번째 칸까지 존재하는 뱀과 사다리 게임판이 존재할 때, n개의 사다리와 m개의 뱀이 있다.사다리를 밟으면 위로 이동하고 뱀을 밟으면 아래로 내려간다.입력 예제 1을 예로 들면3 732 6242 6812 9895 1397 2593 3779 2775 1949 4767 17사다리가 3개, 뱀이 7개 있고 2번째 줄부터 순서대로 사다리, 뱀을 입력받는다.숫자 2개가 있는데, 사다리 32 62를 예로 들면 32를 밟게 되면 62로 이동하고, 4번째 줄인 뱀 95 13의 경우는 95를 밟으면 13으로 내려간다. 주사위를 적게 돌리.. 2024. 8. 12.
[Kotlin, S1] 백준 6064번 카잉 달력 카잉 달력(6064번)Silver 1#수학 #브루트포스 알고리즘 #정수론 #중국인의 나머지 정리https://www.acmicpc.net/problem/6064 문제 내용  문제 접근카잉 제국의 달력 형식은 x : y 형식으로 이루어져 있고 x, y를 정하기 위해 m, n을 사용한다.위 문제 설명을 해석해 보자면 x m = 12일 때 x가 12가 되면 1로 초기화된다는 뜻이다. 이는 x가 1부터 12까지 반복된다는 뜻이다. y도 마찬가지이다.이 사실을 알았으면 눈치가 빠른 분들은 규칙 파악에 성공했을 것이다. 그럼 바로 코드를 작성하러 가시면 된다. 예를 들어 m = 10이고, n = 12일 때 마지막 해는 60이다.m이 10이면 x는 1부터 12를 반복해서 돌게 되고 y도 1부터 10까지 돌게 된다.해.. 2024. 8. 11.
[Kotlin] 공부일지(2024-08-09) 오늘 공부한 내용 정리(2024년 8월 9일)  알고리즘 문제풀이정수 직사각형(SIlver 5, 9196번)https://rkdrkd-history.tistory.com/188 [Kotlin, S5] 백준 9196번 정수 직사각형정수 직사각형(9196번)Silver 5#브루트포스 알고리즘 #정렬 #런타임 전의 전처리 문제 내용  문제 접근문제에서의 직사각형의 크기를 판별하는 방법은 2가지이다.1. 대각선이 더 긴 직사각형이 더rkdrkd-history.tistory.com   FA수의 진(SIlver 3, 31883번)https://rkdrkd-history.tistory.com/189 [Kotlin, S3] 백준 31883번 FA수의 진FA수의 진(31883번)Silver 3#수학 #구현 #그리디 알고.. 2024. 8. 9.
[Kotlin, S3] 백준 31883번 FA수의 진 FA수의 진(31883번)Silver 3#수학 #구현 #그리디 알고리즘 #시뮬레이션 문제 내용  문제 접근입력이 순서대로 주어진다.횡단보도를 건너는 시간, 육교를 건너는 시간, 횡단보도가 초록불인 시간, 횡단보도가 빨간불인 시간위 순서대로 입력이 주어지는데, 횡단보도와 육교 중 더 시간이 적게 걸리는 방법을 찾아서 이용해야 한다. 그래야 최솟값을 구할 수 있으니. 횡단보도의 빨간불인 시간과 초록불인 시간을 판단을 잘해야 한다.입력 예제 중 1가지의 예시를 불러와 보겠다.1 2 2 4초록불인 시간은 2분이고, 빨간불인 시간은 4초다.이 에시를 보면 2분이 경과했을 때 횡단보도를 건널 수 있게 생겼지만 건너면 안 된다.정확히 2분이 되는 순간 빨간불이 되기 때문에 기다려야 한다.표로 나타내 보면 다음과 같다.. 2024. 8. 9.
[Kotlin, S5] 백준 9196번 정수 직사각형 정수 직사각형(9196번)Silver 5#브루트포스 알고리즘 #정렬 #런타임 전의 전처리 문제 내용  문제 접근문제에서의 직사각형의 크기를 판별하는 방법은 2가지이다.1. 대각선이 더 긴 직사각형이 더 큰 직사각형이다.2. 대각선의 길이가 같으면 높이가 더 높은 것이 더 큰 직사각형이다.이 2가지 조건을 이용해 입력받는 직사각형보다 큰 직사각형 중 가장 작은 직사각형을 출력해야 한다. 문제 조건이 직사각형 값이 150을 넘지 않는다고 한다. 이러면 전체 탐색을 해도 상관없는 제한이다.그래서 높이와 너비가 1부터 150까지의 직사각형들을 모두 뽑아서 정렬시키면 된다.하지만 문제에 조건이 있다. 1. 너비(w)가 높이(h) 보다 커야 한다.2. 직사각형만을 뽑아야 한다.위 2가지의 조건을 코드로 구현해 보자.. 2024. 8. 9.
728x90
반응형