문제 출처 : https://www.acmicpc.net/problem/17176 언어 : Kotlin 문제 설명 :방금 도착한 암호문을 해독했는데, 해독에 오류가 없는지 확인해보려 한다. 해독한 문장이 암호문을 해석한 결과로 나올 수 없다면, 그 해독은 잘못된 것이다. 암호문은 0 이상 52 이하의 정수로 이루어져 있다. 0은 띄어쓰기, 1 - 26 범위 안의 수는 A ~ Z, 27 - 52 범위 안의 수는 a ~ z로 해석된다. 암호문은 띄어쓰기를 포함한 모든 철자를 이와 같이 정수로 치환한 후 순서를 무작위로 뒤섞어서 만들어졌다. 입력 :첫 번째 줄에는 주어질 수열의 길이 N이 주어진다. (1 ≤ N ≤ 100,000)두 번째 줄에는 암호문에 해당하는 수 N개가 띄어쓰기와 함께 주어진다.세 번째 줄..
중단점이란?적응형 앱을 만들려면 화면 크기에 따라 레이아웃이 변경되도록 해야 한다. 레이아웃 변경이 이루어지는 측정 지점을 중단점이라고 한다. Material Design은 대부분의 Android 화면을 처리하는 체계적인 중단점 범위를 만들었다. 이 중단점 범위 표에서는 앱이 화면 크기가 600dp 미만인 기기에서 실행 중인 경우 모바일 레이아웃을 표시해야 함을 보여준다. 창 크기 클래스 사용하기Compose에 도입된 WindowSizeClass API를 사용하면 Material Design 중단점 구현이 간단해진다.창 크기 클래스는 너비와 높이에 대해 소, 중, 대형의 세 가지 크기 카테고리를 도입한다. 프로젝트에서 WindowSizeClass API를 구현하기 위해 다음 단계를 따라야한다....
이전에 작성한 글에서 NavHostController를 사용해 한 화면에서 다른 화면으로 이동하는 방법을 알아봤다.https://small-stepping.tistory.com/926 Compose Navigation 경로 정의 및 NavHostController이번에 작성하고 있는 글은 Jetpack Compose의 Navigation 튜토리얼 부분이다. https://developer.android.com/courses/pathways/android-basics-compose-unit-4-pathway-2?hl=ko#codelab-https://developer.android.com/codelabs/basic-android-kotlismall-stepping.tistory.com Compose를 사..
문자열을 다룰 때 빼놓을 수 없는 자료 구조인 접미사 배열(Suffix Array)은 다양한 문제를 푸는데 사용 가능하다.이 접미사 배열은 어떤 문자열 S의 모든 접미사를 사전순으로 정렬해둔 것으로 기본적으로 문자열 길이의 제곱에 비례하는 메모리가 필요하기 때문에 보통 각 접미사의 시작 위치를 담는 정수 배열로 구현된다. 예를 들어, 문자열 S = banana의 접미사 배열은 다음과 같다.Suffixindexa6ana4anana2banana1na5nana3 접미사 배열은 위에서 말했듯 각 접미사의 시작 위치를 담는 정수 배열로 구현되며, 이를 사용해 문자열 검색에 사용할 수 있다. 접미사 배열을 정렬 알고리즘으로 구현할 경우 구현은 매우 쉽다. 그러나 시간 복잡도가 O(nLogn)이 걸리고 최악의 경우 ..
문제 출처 : https://www.acmicpc.net/problem/11507 언어 : Kotlin 문제 설명 :최근에 진솔이는 로봇 공학을 하기 시작했다. 그래서 포커 카드가 완전한 세트인지 확인하는 로봇을 만들기로 결심했다. 그는 프로그램을 작성하는 일을 분담했다. 그 프로그램은 카드의 모양(스페이드(♠), 하트(♡), 다이아몬드(♢), 클럽(♣))을 인식하는 것이다. 문제를 간단하게 하기 위해서 모든 카드는 하나의 모양과 하나의 숫자를 가진다고 가정한다. 여기서 그 모양은 실제 그림 대신 문자로 대체한다. P,K,H,T에 해당한다. 그리고 숫자는 1~13에 해당하는 정수이다. 로봇은 각각의 카드를 TXY의 형태로 '카드 이름'을 정하는데 T는 모양에 해당하고 XY는 숫자에 해당한다. 만약 만약 ..
문제 출처 : https://www.acmicpc.net/problem/1605 언어 : Kotlin 문제 설명 :알파벳 소문자로 이루어진 길이 L인 문자열이 있다. 이 문자열의 부분문자열 중, 적어도 한 번은 반복되는 (다시 말해서, 전체 문자열에서 두 번 이상 나타나는) 부분문자열을 '반복 부분문자열'이라고 부르자. 문자열이 주어지면, 가장 긴 '반복 부분문자열'의 길이를 구하는 프로그램을 작성하시오. 입력 :첫째 줄에 문자열의 길이 L(1 ≤ L ≤ 200,000)이 주어진다. 둘째 줄에는 문자열을 이루는 L개의 알파벳 소문자들이 띄어쓰기 없이 주어진다. 출력 :첫째 줄에 가장 긴 '반복 부분문자열'의 길이를 출력한다. 만일 '반복 부분문자열'이 하나도 존재하지 않는다면 0을 출력한다. 제한 사항 ..
문제 출처 : https://www.acmicpc.net/problem/25915 언어 : Kotlin 문제 설명 :여러분은 연세를 사랑하십니까?연세인이 가장 사랑하는 응원곡,사랑한다 연세여, 연세여 사랑한다... 고려대학교 학생 훈규는 2022 정기 연고전에서 열심히 응원을 하다가 정신을 잃고 깨어나 보니 연세대학교의 감옥에 갇혀 있었다. 훈규가 감옥을 탈출하기 위해서는 바닥에 깔린 비밀번호 석판을 이용해서 비밀번호 "ILOVEYONSEI"를 입력해야 한다. 비밀번호 석판은 총 26가지의 석판이 일렬로 나열되어 있고, 각각 알파벳 대문자가 왼쪽부터 알파벳 순서대로 적혀 있다. 즉, i번째 석판에는 i번째 알파벳 대문자가 적혀 있다. 인접한 석판의 거리는 1이다. 따라서 A가 적힌 석판에서 출발해Z가 적..
1. 세그먼트 트리란? 간격 또는 세그먼트에 대한 정보를 저장하는데 사용되는 트리 데이터 구조이다.주어진 포인트를 포함하는 저장된 세그먼트에 대해서 쿼리할 수 있다. N개의 원소에 대하여 구성된 세그먼트 트리는 트리를 생성하는 비용은 O(N)이다.원소를 Update하는데 O(Log N)의 시간 복잡도가 필요하고, 쿼리 또한 O(Log N)의 시간 복잡도가 요구된다. 세그먼트 트리는 누적합, 구간합, 구간의 최솟값을 구하는데 사용할 수 있다. 1.1. 생성1차원 배열을 통해 구현하며 0번 Index는 사용하지 않는다.원본 배열 Size의 2배 크기로 구성한다.크기를 2배로 잡는 것은, 원본 배열로 세그먼트 트리의 리프 노드를 구성하게 되면, 세그먼트 트리가 이진트리이므로 (리프노드 개수 / 2)를 하면 모..
노드 정점들을 연결하는데 가장 적은 비용으로 연결하려면 어떻게 해야할까? 해당 질문을 해결하기 위한 대표적인 방법은 크루스칼 알고리즘이다.크루스칼 알고리즘이란, 모든 노드를 지나면서 사이클이 생기지 않고 가장 적은 비용을 가는 경로를 알 수 있다. 이 4개의 그림을 보자.모두 그래프의 모든 정점을 지난다는 것을 알 수 있으며, 순환고리(사이클이 생기지 않는 연결)이다.이러한 연결을 신장 트리라고 한다. 각 그림들의 가중치 합은 다음과 같다.3 + 4 + 1 = 8 4 + 3 + 2 = 94 + 5 + 2 = 113 + 2 + 1 = 6 가장 작은 가중치 합을 가진 그림은 우하단의 그래프이며, 이러한 값을 갖는 연결을 최소 신장트리라고 한다.최소 신장 트리를 구하는 대표적인 방법은 다음과 같다.프림..
문제 출처 : https://www.acmicpc.net/problem/5397 언어 : Kotlin 문제 설명 :창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다. 키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다. 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다. 입력 :첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한..