챌린지반 3주차 세션 과제 과제 1 과제 내용 요구사항에 맞춰 디자인 패턴 2개를 구현한다. Singleton 패턴object Logger{ fun log(message: String){ println("log: $message") }}fun main() { Logger.log("Hello, World")}Object로 Logger 클래스를 선언하여 싱글톤 패턴을 구현한다.해당 클래스는 시스템 전체에서 단 하나의 인스턴스만 존재하게 된다. 클래스.메소드 형식으로 오브젝트의 메소드를 호출할 수 있다. Stragety 패턴interface TextAlignmentStrategy { fun textAlign(text: String) : String}class LeftAl..
코드카타 소수 찾기 문제 numbers의 최대길이는 7이므로 조합 가능한 모든 수를 생성해도 시간초과가 나지 않는다. 입출력 예시 주어진 수를 각 자리수별로 나누고 가능한 모든 조합을 생성한 뒤중복을 제거하기 위해 집합에다 추가한다. 생성한 집합의 요소 중 소수에 해당하는 개수를 반환한다. "17" -> [1, 7] -> [1, 7, 17, 71] -> [7, 17, 71] -> 3"011" -> [0, 1, 1] -> [0, 1, 11, 10, 101, 110] -> [11, 101] -> 2위와 같은 과정을 통해 주어진 수에서 만들 수 있는 소수개수를 반환한다. 조합 생성 함수// str: 현재까지 생성된 숫자 문자열 // remaing: 아직까지 사용되지 않은 문자들private fun getC..
코드카타 가장 큰 수 문제 numbers의 최대 길이는 100,000이기에 주어진 수에서가능한 모든 순열을 만드는 방법은 시간초과를 발생시킨다. 입출력 예시 [0, 0, 0], 0 풀이class Solution { fun solution(numbers: IntArray): String { var res = numbers.map { it.toString() } .sortedWith { a, b -> (b + a).compareTo(a + b) } .joinToString("") return if (res[0] == '0') "0" else res }}정수를 이어붙이기 위해 정수를 모두 문자열로 변환..
코드카타 다리를 지나는 트럭 문제 테스트 케이스를 보면 트럭은 1초에 1칸씩 이동한다는 사실을 알 수 있다. 입출력 예시 모든 트럭의 합이 다리가 버틸 수 있는 무게 이하라면 반환값은 (다리 길이 + 트럭 개수)에 해당한다. 풀이class Solution { fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int { val bridgeQ = LinkedList() // 다리 위에 있는 트럭(무게) val distanceQ = LinkedList() // 각 트럭이 다리를 건너기까지의 남은 거리 var weightSum = 0 // 현재 다리 위에 있는 트럭들의 무게합 ..
코드카타 2개 이하로 다른 비트 문제 비트는 십진수를 이진수로 변환한 값에 해당한다. 주어진 수 x의 비트와 비트가 1~2개 다른 수들 중에서 제일 작은 수를 찾아야 하는데 이때 그 수는 x보다 큰 값을 가진다. 입출력 예시 numbers의 요소는 x에 해당하며 result의 요소는 f(x)에 해당한다. 시간 복잡도를 고려하지 않은 풀이class Solution { // 앞에 0을 붙여 두 2진수의 길이를 같게 만듬 private fun makeSameLen(beat1: String, beat2: String): Pair { var maxLen = maxOf(beat1.length, beat2.length) val padBeat1 = beat1.padStart(ma..
코드카타 숫자 변환하기 문제 입출력 예시 x를 y로 만드는 최소 횟수를 구하는 문제이므로 bfs의 개념을 활용해야 한다. 풀이import java.util.*class Solution { fun solution(x: Int, y: Int, n: Int): Int { // 큐와 방문표시를 선언하고 초기값 설정 val q = LinkedList(listOf(Pair(x, 0))) val v = mutableListOf(x) // 너비 우선 탐색 while (q.isNotEmpty()) { // 각 변수는 현재 탐색 중인 노드, 연산 횟수에 해당함 val (current, res) = q.remove(..
코드카타 롤케이크 자르기 문제 롤케이크를 반으로 잘랐을 때 토핑 종류수가 같은 경우의 수를 구하는 문제이다. 입출력 예시 토핑개수가 아주 많을 때의 경우도 고려해야 한다. 시간초과 풀이class Solution { // 토핑 종류 수 반환 함수 private fun tNum(list: List): Int { return list.groupBy { it }.keys.size } fun solution(topping: IntArray): Int { var res = 0 // 토핑의 길이만큼 반복하여 롤케이크를 자른다 for (i in topping.indices) { // 왼쪽 롤케이크의 초기 길..
코드카타 뒤에 있는 큰 수 찾기 문제 풀이class Solution { fun solution(numbers: IntArray): IntArray { // 결과를 저장할 배열로, 모든 요소의 초기값을 -1로 설정 val res = IntArray(numbers.size) { -1 } // 인덱스를 저장할 스택 초기화 val stack = mutableListOf() // 주어진 정수 배열의 각 요소를 순회 for (i in numbers.indices) { // 스택이 비어있지 않고, 스택의 마지막 인덱스가 가리키는 숫자가 // 현재 숫자보다 작을 경우, 해당 인덱스의..