목록코딩테스트 풀이/카카오 (9)
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
DFS 문제이다. 따로 알고리즘을 공부한 적이 없어서 필요한 개념이 있으면 원리만 익힌 뒤 나름대로 구현해 보고 있다. Stack을 이용하는 방법도 있는 것 같은데 개인적으로 재귀가 가장 직관적으로 잘 풀려서 재귀를 이용했다. 다만 재귀를 이용할 경우 항상 Stack이 넘치는 것을 주의해야 한다. 이 문제의 경우 표본이 크지 않아서 문제가 없었으나 혹시 표본이 커질 경우 경우의 수를 좀 더 쳐내거나 꼬리재귀를 사용하는 방법도 고려해야 한다. 우선 각각의 banned_id에 해당될 수 있는 모든 유저를 각각의 리스트에 담아 matched_id를 만든다. 예를 들어 사용자 목록 : [철수, 영희, 철구, 미애, 은희] 가 있고 불량 사용자 : [철*, *구, *희] 가 있다면 철* -> 철수, 철구 *구 -..
[풀이과정] 정말 매우 고생한 문제였다. 이상하게 생각이 꼬여 계속 테스트 케이스에서 실패하는 바람에 거의 반나절을 넘게 푼 것 같다. 우선 key를 한칸씩 이동시키며 lock과 만날 수 있는 모든 경우의 수를 고려해주면 된다. 내 경우엔 lock의 왼쪽 하단부터 오른쪽 상단까지 이동시키며 자물쇠의 해제 여부를 판단하였다. 이것을 key를 회전시켜가며 4번 진행해주면 된다. 문제 자체는 딱히 고차원의 알고리즘이나 사고를 필요로 하지 않기 때문에 배열과 인덱스를 다루는 부분 그리고 조건에서 실수만 하지 않는다면 무난히 풀 수 있는 문제라고 본다. [사용언어] Kotlin [소스코드] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ..
푼지 좀 지난 문제다보니 자세히 어떻게 풀었는지 가물가물한데 문자열을 1개, 2개, 3개 단위로 늘려가며 압축해본 후 가장 짧은 값을 리턴하면 된다. 참고로 소스는 절대 깔끔한 편이 아니다. 더 좋은 다른 코드가 많으니 참고 바람. 사용언어: Kotlin 소스코드: fun solution(s: String): Int { var answer = 0 var answerStr = "" var count = 0 var tmpStr = "" var tmpCount = 0 while(count 1) { answerStr = answerStr.plus(tmpCount.toString() + tmpStr) if(i == s.length/count-1) { answerStr = answerStr.plus(s.substr..