본문 바로가기

코딩테스트9

[백준] 10813 공 바꾸기 - Kotlin(코틀린) 10813 공 바꾸기 이전에 풀었던 10810, 10811 번과 유사한 바구니 문제이다. 이번엔 입력받은 i, j 의 값을 바꾸는 문제이다. 문제 분석 바구니를 N 개 가지고 있고, 각각의 바구니에는 1번부터 N 번까지 번호가 매겨져 있다. 이전에는 여기까지만 보고 바구니를 표현할 크기 N의 배열을 만들고, 바구니의 번호로 초기화 해야 겠다! 라고 생각했을 수 있지만, 이 문제는 바구니에 들어있는 공의 번호로 배열 요소를 초기화 해야 한다. 바구니에 들어있는 공을 교환하여 결과를 확인하고 싶은 것이므로 "공 = 배열 요소" 가 되어 배열 요소를 교환해야 한다. 바구니 번호는 Index 를 나타내기 위한 장치일 뿐이다. 입력으로 들어오는 i, j 의 범위를 간접적으로 나타내는 것으로 추후 배열의 Inde.. 2025. 4. 15.
[백준] 10811 바구니 뒤집기 - Kotlin(코틀린) 10811번 바구니 뒤집기 이전에 포스팅한 10810 번과 유사하지만 이번엔 입력을 받은 start 와 end 사이의 배열을 뒤집는 문제이다. 다행히 코틀린에는 reverse 라는 Array 의 확장함수가 있어 쉽게 해결할 수 있다. 문제 분석바구니의 갯수는 N개, 각 바구니에는 1 부터 N 까지 번호가 매겨져 있다고 했다. 이 번호는 가장 왼쪽이 1, 가장 오른쪽이 N 이다. 그렇다면, 바구니를 표현할 배열을 생성하고, 초기값을 1..2..3..N 이런식으로 지정해 줄 수 있다. M 번 바구니의 순서를 뒤집을 것이므로 M 번 반복할 것이고, 입력으로 뒤집을 범위 i, j를 받는다. 조건을 보면, N, M 은 정수로 표현이 가능하고, i 는 j 보다 작거나 같으므로 별도의 예외처리를 해주지 않아도 괜찮다.. 2025. 4. 14.
[백준] 10810번 공 넣기 - Kotlin(코틀린) 10810번 공 넣기문제 분석바구니의 갯수는 N, 각각 바구니에서는 1번부터 N 번까지 번호가 매겨져 있다고 했다.바구니들을 배열로 지정했을때 배열의 크기는 N, 바구니의 번호는 index + 1 형태이다.또한 공이 들어있지 않은 바구니는 0을 출력하므로 바구니 배열의 초기값을 0으로 초기화 시켜줄 것이다. 바구니에는 공을 1개만 넣을 수 있다고 했기 때문에 공을 넣을때 바구니 배열 내의 값을 덮어씌워주면 된다. M 번 공을 넣는다고 했기 때문에 M 번 반복해서 공을 넣는 작업을 진행해야 하고, 바구니 범위에 동일한 번호의 공을 넣는다고 하니배열 내 특정 범위에 모두 같은 값을 넣어주는 작업을 진행하게 될 것이다. N의 수 범위와 M 의 수 범위는 Int 형으로 표현할 수 있을 것이고, 공을 넣는 방법 .. 2025. 4. 11.
[백준] 25314번 코딩은 체육과목 입니다 - Kotlin(코틀린) 25314번 코딩은 체육과목입니다. 문제를 확인해보면, N 은 4의 배수로 주어지며, 4 이상 1000 이하이므로, Int 형을 사용해도 상관없다. 예제 입력1 과 예제 출력1을 보면 N 을 4로 나눈 몫 만큼 long 을 붙이고 마지막에 int 를 붙이는 모양인 것을 알 수 있다. 풀이 코드는 다음과 같다.import java.io.BufferedReaderimport java.io.InputStreamReaderfun main(args: Array) = with(BufferedReader(InputStreamReader(System.`in`))) { try { val input = readLine().toInt() if(input 1000) { th.. 2025. 4. 11.
[백준] 11382번 꼬마 정민 - Kotlin(코틀린) 11382 번 꼬마 정민 굉장히 간단한 문제라고 생각했다가 무려 4번이나 시도했다. 정답 코드부터 보자import java.io.BufferedReaderimport java.io.InputStreamReaderfun main() { BufferedReader(InputStreamReader(System.`in`)).use { br -> val (a, b, c) = br.readLine().split(" ").map { it.toLong() } println(a + b + c) }} 4번이나 시도하게 됬던 원인은 바로 자료형에 있었다. 입력으로 주어지는 A, B, C 의 범위가 1부터 10의 12승, 즉 1조 라는 큰 숫자까지 받을 수 있게 되어있다. 아무생각 없이 입력받은 A, B, C .. 2025. 4. 11.
Java(자바) - 선택정렬, 버블정렬, 삽입정렬, LRU(Least Recently Used) 오늘 학습한 선택정렬, 버블정렬, 삽입정렬, LRU 알고리즘에 대해 정리한다. 1. 선택정렬 주어진 리스트에서 최소값을 찾고, 그 값을 맨 앞의 값과 교체한다. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체하는 정렬이다. n개의 리스트가 주어졌을때 시간복잡도는 O(n^2)이다. 전체 배열의 개수가 n일때 인덱스는 n-1까지 존재한다. 0부터 n-2까지 반복하는 i for 문에서 idx를 i 로 두고 j+1부터 n까지 반복하는 j for문을 내부에서 반복하며 array[j] < array[idx] 를 판별하여 idx위치의 값보다 j의 위치의 값이 작으면 idx를 j로 한다.(최솟값 인덱스 탐색) j for문 반복이 끝나면 array[i]의 값과 array[idx] 값의 위치를 교환해준다. 이 과정.. 2023. 1. 7.