본문 바로가기

728x90

전체 글

(229)
[백준][KOTLIN] 1427 소트인사이드 풀이 입력을 String 으로 받는다. 입력된 String 을 CharArray 로 변환한다. 2번의 정렬을 오름 차순으로 정렬 한다. Collection - reverse 함수를 이용한 후 출력한다. 코드 import java.util.* import java.io.* fun main(ars: Array) { val br = BufferedReader(InputStreamReader(System.`in`)) val bw = BufferedWriter(OutputStreamWriter(System.out)) val number = br.readLine() var result = mutableListOf() for (n in number) { result.add(n) } Collections.sort(re..
[백준][KOTLIN] 2108 통계학 풀이 입력을 받아 산술 평균, 중앙값, 범위를 정의에 따라 구한다. 최빈 값을 구하기 위해서 입력된 수의 범위가 4000보다 작은 정수이므로 입력된 정수를 저장하는 빈 배열(크기 8001, 초기 값 0) 을 선언한다. 입력된 정수를 index 로 하여 2번에서 정의한 배열의 값을 증가 시킨다. 이때 음의 정수일 경우 (4000 - input) 으로 index 를 처리 한다. 입력된 정수를 저장한 배열을 이용하여 최빈값(max) 의 크기를 찾는다. 입력된 정수를 저장한 배열을 검색하여 최빈값의 크기와 같은 값일 경우 해당 index 를 저장한다. 5번에서 저장한 값이 2개 이상일 경우 1번째를 출력하고 아닐 경우 0번째를 출력한다. 코드 import java.io.* import java.util.* im..
[백준][KOTLIN] 2751 수 정렬하기 2 풀이 입력이 1,000,000 이므로 O(N) 시간복잡도가 되어야 한다. Kotlin API 혹은 정렬 알고리즘 중 최대 O(N) 시간 복잡도를 가지는 것을 선택 한다. Kotlin API 의 Arrays.sort() 를 이용할 경우 시간 초과가 발생한다. Collections.sort() 를 이용할 경우 최소 O(NlogN) 에서 최대 O(N) 의 시간 복잡도를 가지게 되어 문제의 조건을 만족한다. 정렬 알고리즘을 이용할 경우 퀵 정렬은 최악의 경우 O(N^2)의 시간 복잡도를 가지므로 이 문제는 합병 정렬을 이용한다. 마지막으로 println 으로 출력시 시간 초과가 발생할 경우 BufferedWriter 로 한번에 출력될 수 있도록 한다. 코드 Collections.sort() 이용 import j..
[알고리즘][KOTLIN] 합병 정렬 - O(nlogn) 합병 정렬 정의 : 분할정복과 비슷한 개념으로 주어진 배열을 더 이상 나눌 수 없을 때까지 쪼갠 후(Divide) 정렬하여 다시 쪼개진 요소들을 합친다(Conqurr). 코드 import java.io.* import java.util.* private lateinit var sorted: IntArray fun main(args: Array) { val br = BufferedReader(InputStreamReader(System.`in`)) val n = br.readLine().toInt() val st = StringTokenizer(br.readLine()) sorted = IntArray(n) val numbers = IntArray(n) { st.nextToken().toInt() } me..
[알고리즘][KOTLIN] 정렬(선택 정렬, 버블 정렬, 삽입 정렬) - O(N^2) 선택 정렬 정의 : 첫번째 자리에 가장 값은 값을 찾아 넣고 다음 Index 에 그 다음 작은 값을 찾아서 넣는다. 이 과정을 배열이 끝날 때까지 반복 하고 정렬된 배열을 출력 한다. 코드(KOTLIN) : 아래 코드에서 알 수 있을 듯 이중 for 루프를 이용해서 위의 그림의 동작을 수행한다. 시간 복잡도는 O(N^2) 를 가진다. import java.io.* import java.util.* fun main(args: Array) { val br = BufferedReader(InputStreamReader(System.`in`)) val n = br.readLine().toInt() val st = StringTokenizer(br.readLine()) var numbers = IntArray(n..
[백준][KOTLIN][1018]체스판 다시 칠하기 예제 입력1 8 8 WBWBWBWB BWBWBWBW WBWBWBWB BWBBBWBW WBWBWBWB BWBWBWBW WBWBWBWB BWBWBWBW 예제 출력1 1 예제 입력2 10 13 BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB WWWWWWWWWWBWB WWWWWWWWWWBWB 예제 출력2 12 풀이 기준이 되는 원본 데이터를 선언한다.(왼쪽 상단 첫번째가 검은색으로 시작하는 8X8 체스판과 흰색으로 시작하는 체스판) val originB = arrayOf( "BWBWBWBW", "WBWBWBWB", "BWBWBWBW", "WBWBWBWB", "B..
[백준][KOTLIN][2231] 분해합 문제 풀이 각 자리수의 합을 구하는 식을 이용한다. Ex) 216 => 1. 216 % 10 -> 일의 자리 수가 나옴 2. 216 / 10 -> 일의 자리 수를 제외한 수가 나옴 : 21 3. 1, 2번 과정을 n 이 0이 될때까지 반복하면 각 자리 수를 찾을 수 있음 각 자리수의 합과 현재의 숫자를 합하여 N 과 같으면 루프를 빠져 나온다. import java.util.* fun main(args: Array) { val sc = Scanner(System.`in`) val N = sc.nextInt() var min = 0 for (i in 1..N) { val lsum = lineSum(i) if (i + lsum == N) { min = i break } } print(min) } privat..
[알고리즘][KOTLIN] 이진 탐색 정의 입력된 배열이 오름 차순 혹은 내림 차순의 배열일 때 선형 탐색보다 빠르게 검색할 수 있는 알고리즘 검색 방법 배열을 오름 차순으로 정열 한다. 배열의 중앙 값을 찾는다. 검색하고자하는 값과 중앙값의 크기를 비교한다. 3번에서 중앙값이 클 경우 중앙 값 기준으로 왼쪽의 배열로 검색 값을 찾는다. 3번에서 중앙값이 작을 경우 중앙 값 기준으로 오른 쪽의 배열로 검색 값을 찾는다. 4, 5 번 과정을 반복한다. 코드 import java.util.* fun main(args: Array) { val sc = Scanner(System.`in`) print("요소수 : ") val num = sc.nextInt() val x = IntArray(num) { sc.nextInt() } x.sorted() ..