[백준] 10799 쇠막대기
·
Algorithm/Algorithm (문제풀이)
🔒 문제 🧠 아이디어 "()"을 모두 '*'로 미리 대치한다. 🔑 풀이 1. Kotlin Code ')' 을 만날 때마다 이전 '(' 까지 pop 하며 *의 개수를 카운팅하는 무식한 방법으로 풀이했다. import java.io.BufferedReader import java.io.InputStreamReader import java.util.* fun main() { val bufferedReader = BufferedReader(InputStreamReader(System.`in`)) val str = bufferedReader.readLine().replace("()", "*") val stack = Stack() var answer = 0 for (char in str) { when (char) ..
[백준] 15686 치킨 배달
·
Algorithm/Algorithm (문제풀이)
🔒 문제 🧠 아이디어 문제를 읽자마자 뵈는 키워드는 '모든 집에서 치킨 집 까지의 최단 거리'다. 집의 개수가 최대 100개, 치킨집 개수가 최대 13개, 한 집에서 치킨 집까지의 거리 최대 연산량은 100 따라서 100 * 13 => 1,300으로 백트래킹 풀이가 충분히 가능하겠다는 생각이 들었다. 결국 조합이다. $$ _{13}C_{M} $$ (최대 13개 숫자 중 치킨 집 수 M개를 중복 없이 선택해야한다.) 치킨집의 좌표 List keep 모든 집의 좌표 keep 1과 2를 모두 돌면서 집 사이의 거리 (가로 좌표 차이 + 세로 좌표 차이) 각 치킨 집 좌표별 집과의 거리 keep 13개중 M 개를 고른 치킨집 좌표쌍까지의 거리를 모든 집에서부터 구한다. 모든 집은 모든 치킨 까지의 거리를 구하고..
[백준] 1504 특정한 최단경로
·
Algorithm/Algorithm (문제풀이)
🔒 문제 🧠 아이디어 반드시 2개의 정점을 경유해서 가야하므로 Way point (경유지) 1, 2 가 존재할 때 선택할 수 있는 경로는 다음 2가지로 좁혀진다. 출발 노드 -> 경유지 1 -> 경유지 2 -> 목적지 출발 노드 -> 경유지 2 -> 경유지 1 -> 목적지 여기서 구해야 할 값은 다음 5가지다. 출발 노드 -> 경유지 1의 최단경로 출발 노드 -> 경유지 2의 최단경로 경유지 1 -> 목적지의 최단경로 경유지 2 -> 목적지의 최단경로 경유지 1 - 경유지2 의 최단경로 양방향 그래프기 때문에 경유지 1-> 경유지 2, 경유지 2-> 경유지1는 서로 거리가 같기 때문에 한 번만 구하면 된다. 최단 경로를 구해야하므로 Dijkstra 알고리즘 사용한다. 출발 노드 -> 경유지 1,2 는 한..
[백준] 18808 스티커 붙이기
·
Algorithm/Algorithm (문제풀이)
🔒 문제 🧠 아이디어 스티커를 포함한 모든 모눈 종이는 결국 직사각형 형태다. 바탕이 될 노트북 모눈종이판을 'noteBookTable' 스티커 조각들을 'sticker' 라고하면 1. 스티커 붙이기 가능 불가능 여부 판별법 다음 4가지 케이스가 존재한다. ✔️noteBookTable 에서는 0 (비어있고) sticker 에서는 1 (스티커) ✔️noteBookTable 에서는 1 (이미 다른 스티커가 붙어있고) sticker 에서는 0 (공백) ✔️noteBookTable 도 0 (비어있고) sticker 에서도 0 ❌noteBookTable 에서 1 (이미 다른 스티커가 붙어있고) sticker 에서도 1 (스티커) 위 케이스중 1,2,3 번만 스티커 붙이기가 가능한 케이스다. noteBookTabl..
[Algorithm] 2차원 배열 (행렬) 회전하기
·
Algorithm/Algorithm (이론)
알고리즘 문제에 간간히 등장하는 행렬 회전 로직, N * N 정사각형은 물론 N * M 직사각형 행렬에도 활용 가능한 코드를 미리 작성해보자. 📝 규칙 요점 정리 90도 회전함수 원본 행렬을 90도 회전시켜서 회전된 행렬을 반환한다. fun rotate(originalArray: Array) : Array { val originalRowSize = originalArray.size val originalColSize = originalArray.first().size // 행 열 크기 전환 val rotatedArray = Array(originalColSize){IntArray(originalRowSize)} for (row in originalArray.indices) { for (col in ori..
[Kotlin] array copyOf, clone
·
JVM/Kotlin
1차원 배열 복사 copyOf() 메소드를 사용하면 deep copy 가 된다. 새로운 레퍼런스 주소로 별도 공간에 array 가 할당된다. copyOf 로 deep copy 하면 복사된 배열의 값을 수정해도 원본 배열에는 영향을 미치지 않는다. 1차원 배열 복사 Test // 1차원 배열 copy @Test internal fun firstArray() { val nums = intArrayOf(1, 3, 5, 7, 9) val copiedArr = nums.copyOf() // copy 된 배열 값 수정 copiedArr[0] = 0 println("Original Array") for (num in nums) print("$num ") println() println("================..