목록코딩테스트 풀이 (28)
Simple&Natural
class Solution { fun solution(new_id: String): String { var answer: String = "" answer = new_id.toLowerCase() .replace(Regex("""[^a-z0-9\-_.]"""), "") .replace(Regex("""[.]{2,}"""), ".") .removePrefix(".") .removeSuffix(".") .run { if (isEmpty()) "a" else this } .run { if (length>15) substring(0, 15) else this } .removeSuffix(".") .run { var tmpStr = this while (tmpStr.length
언어 Kotlin class Solution { fun solution(lottos: IntArray, win_nums: IntArray): IntArray { var answer: IntArray = IntArray(2) var max = 0 var min = 0 // 각 로또번호 검색 lottos.forEach { num -> if (num!=0) { if (win_nums.contains(num)) min++ } else { max++ } } max += min answer[0] = getPrize(max) answer[1] = getPrize(min) return answer } fun getPrize(matchCount: Int): Int = if (matchCount
DFS 문제이다. 따로 알고리즘을 공부한 적이 없어서 필요한 개념이 있으면 원리만 익힌 뒤 나름대로 구현해 보고 있다. Stack을 이용하는 방법도 있는 것 같은데 개인적으로 재귀가 가장 직관적으로 잘 풀려서 재귀를 이용했다. 다만 재귀를 이용할 경우 항상 Stack이 넘치는 것을 주의해야 한다. 이 문제의 경우 표본이 크지 않아서 문제가 없었으나 혹시 표본이 커질 경우 경우의 수를 좀 더 쳐내거나 꼬리재귀를 사용하는 방법도 고려해야 한다. 우선 각각의 banned_id에 해당될 수 있는 모든 유저를 각각의 리스트에 담아 matched_id를 만든다. 예를 들어 사용자 목록 : [철수, 영희, 철구, 미애, 은희] 가 있고 불량 사용자 : [철*, *구, *희] 가 있다면 철* -> 철수, 철구 *구 -..
원리는 매우 간단한데 직접 그림을 그려보면 더욱 이해가 쉽다. 90도 회전은 위아래를 대칭시킨 뒤 주 대각선에 대해 대칭시킨 형태이다. 대각선에 대해 먼저 대칭을 시켜도 된다. 여기서 주 대각선이란 배열의 행과 열이 같은 라인을 의미한다. 아래의 그림은 2차원 배열을 보기 쉽게 도식화한 것이다. 색이 칠해진 부분을 1, 빈 칸을 0 으로 보면 [[0, 1, 0], [1, 1, 0], [0, 0, 1]] 형태의 2차원 배열이 된다. 이 배열을 위에서부터 쌓아내렸을 경우와 아래에서부터 쌓아 올렸을 경우 두 가지로 생각해보자. (사실 별 차이는 없다) reverse를 이용하면 배열의 행이 역순이 되므로 위아래가 바뀌고 i, j 대신 j, i를 대입해주면 배열의 행과 열이 바뀌게 되므로 대각선에 대한 대칭이 된..