본문 바로가기
  • 개발하는 곰돌이

Kotlin154

[Kotlin] 백준 11723 : 집합 문제 링크 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 문제 해설 단순한 구현 문제지만 메모리 제한이 매우 적다. 주어지는 입력의 수가 1부터 20까지밖에 되지 않으므로 크기가 21인 Byte 배열을 만들어서 구현하였다.(0 : 배열에 없음, 1 : 배열에 있음) Code import java.util.StringTokenizer fun main() = with(System.`in`.bufferedReader()) { val bw = System.out.bufferedWriter() val s = ByteArray(21) var st: Str.. 2022. 12. 5.
[IntelliJ] Spring Boot 프로젝트의 기본 설정 및 첫 페이지 만들기 목차 Spring Boot 기본 설정 Spring Boot의 기본 설정들은 src/main/resources/application.properties 에서 설정할 수 있다. 최초 프로젝트를 생성한 이후에는 다음과 같이 텅 빈 파일만 있을 것이다. 예를 들어 서버 포트를 변경하고자 할 때는 server.port를 입력하고 사용하고자 하는 포트 번호를 입력하면 된다.(default값은 8080) 예를 들어, 포트를 11111로 변경하면 아래와 같이 11111번 포트로 접속해야 정상적으로 접속할 수 있고 기존의 8080번 포트로는 접속이 불가능해진다. 이외에도 DB 관련 설정이나 mapper 경로 설정을 포함한 각종 Spring 설정들을 본 파일에서 설정할 수 있다. Gradle에 의존성 추가 처음 Sprin.. 2022. 12. 5.
[Kotlin] 백준 5430 : AC 문제 링크 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제 해설 리스트나 덱(Deque)을 이용해서 풀 수 있는 문제다. 풀이 과정은 두 방법 모두 동일하다. 가장 먼저 입력에서 [x1,...,xn] 형태로 주어진 배열을 덱에 삽입하기 위해 입력값을 파싱해줘야 한다. slice() 메소드로 입력의 시작과 끝에 있는 대괄호를 제외한 문자열을 만들고 콤마(,)를 구분자로 하여 각 정수값을 덱에 삽입한 후 주어진 함수 연산을 시작한다. 문제의 함수에서는 뒤집기 연산이라는 것이 있는데 R이 들어왔을 때 정말로 뒤집어서 계산하면 안된다. R이 들어올 때마다 뒤집기를 수.. 2022. 12. 4.
[Kotlin] 백준 7662 : 이중 우선순위 큐 문제 링크 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 문제 해설 처음에는 최대힙과 최소힙을 하나씩 만들어서 구현하려고 했는데 시간 초과가 났다. 제거 연산을 수행할 때 'D 1'이면 최대힙에서 제거한 값을 최소힙에서 remove()로 제거하고, 'D -1'이면 최소힙에서 제거한 값을 최대힙에서 같은 방법으로 제거하는 방식으로 구현했는데 저 remove() 과정에서 힙을 탐색해야 하다보니 시간을 초과한 것 같아서 다른 방법을 찾아보기로 했다. 그런 이유로 TreeMap을 이용하여 문제를 풀어보았는데 성.. 2022. 12. 4.
[Kotlin] 백준 1654 : 랜선 자르기 문제 링크 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제 해설 2805 - 나무 자르기와 유사한 이진 탐색 문제다. 차이점은 목표치와 동일하면 바로 종료할 수 있던 나무 자르기와 달리 이 문제는 목표치(필요한 랜선의 개수)에 도달하더라도 랜선의 길이를 최대로 하기 위해 계속 검사를 해야한다는 점이다. Code fun main() = with(System.`in`.bufferedReader()) { val (k, n) = readLine().split(' ').map { it.. 2022. 12. 3.
[Kotlin] 백준 1874 : 스택 수열 문제 링크 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 해설 문제를 이해하기만 하면 스택을 이용하여 손쉽게 풀 수 있다. 예제 입출력의 경우를 예로 들어 보자. 4, 3, 6을 수열에 넣기 위한 동작을 그림으로 표현하면 다음과 같다. 그림에 대해 설명하자면 처음에 수열에 4를 추가해야 하는데 스택에 4가 없기 때문에 1, 2, 3, 4를 차례대로 삽입한다. 이후 스택의 맨 위에 있는 4를 제거하여 수열에 추가한다. 다음.. 2022. 12. 2.
[Kotlin] 백준 2108 : 통계학 문제 링크 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 문제 해설 주어진 입력으로부터 제시된 값들을 구하면 된다. 1, 2, 4는 손쉽게 구할 수 있지만, 최빈값을 구하고 최빈값이 여러개일 때 두 번째로 작은 값을 구하는 부분은 조금 생각을 해봐야 한다. 최빈값을 구하기 위해 수가 나타나는 빈도를 저장할 별도의 배열을 생성한다. 그리고 N개의 수를 입력받으면서 빈도를 저장할 배열에서 입력하는 수 + 4000을 인덱스로 하는 요소값을 1씩 증가시킨다. N개의 수 입력이 끝났다면 빈도수를 저장한 배열의 최대값이 2개 이상인.. 2022. 12. 2.
[Kotlin] 백준 4949 : 균형잡힌 세상 문제 링크 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다 www.acmicpc.net 문제 해설 스택을 이용하여 풀 수 있는 괄호 문제다. 문자열에서 괄호 외의 다른 문자는 모두 무시하고 괄호의 경우만 계산하면 되는데 모든 괄호가 짝을 이루되, 5번의 조건과 같이 괄호 내부에서도 괄호가 짝을 이뤄야 한다. 예를 들어 "[(])"의 경우는 대괄호 안에 소괄호는 왼쪽과 오른쪽이 모두 존재하지만 대괄호 사이에는 왼쪽 소괄호가, 소괄호 사이에는 오른쪽 대괄호가 있어서 짝을 이루지 못하므로 균형잡힌 문자열이 아니다. 스택을.. 2022. 12. 2.