//콜라 문제
class ColaProblem {
fun solution(a: Int, b: Int, n: Int): Int {
//가지고 있는 빈병 갯수
var empty = n
//받은 콜라 개수
var recieved = 0
while (empty > a - 1) {
//몫
val share = (empty / a) * b
//나머지
val remainder = empty % a
//남은 콜라수
empty = share + remainder
//받은 콜라수
recieved += share
}
return recieved
}
}
빈병 개수가
마트에서 콜라를 받기 위해 주어야 하는 병 수 a에서 1을 뺀 수보다
많을 때,
식이 계속 실행된다.
빈병 개수를 a로 나누어 준 것을
마트에 가져다주면 교환해주는 빈병 개수를 곱하면,
받게 되는 콜라 수 share가 나온다.
그리고,
개수가 맞지 않아 남은 병수가 있을 것이다. (remainder)
share와 더해서 empty의 값을 경신해주고,
얻게 된 콜라수 recieved도 갱신해준다.
나도 설명하니 복잡하다... 찬찬히 읽어보도록..
푸드 파이터 대회
//푸드 파이트 대회
class FoodFightContest {
fun solution(food: IntArray): String {
val sb = StringBuilder()
for(i in 1 until food.size) {
val foodNum = food[i]
val cnt = foodNum / 2
repeat(cnt) {
sb.append(i)
}
}
sb.append(0)
sb.append(sb.replaceFirst(Regex("0"), "").reversed())
return sb.toString()
}
}
인트 배열에서 해당 인덱스의 값을
2로 나누게 되면, 음식을 반복해서 둘 수 있는
값(몫)이 나온다.
그 수만큼 반복해서 음식을 둔다.
for문이 완료되면,
가운데에 0을 둬야 하기 때문에
append 0을 넣어주고,
sb의 reversed가 다음에 들어올 문자열이기 때문에 값을 append 해준다.
하나 가운데 넣었던 0도 한 번 더 들어가기 때문에
repleceFirst로 제일 처음 발견한 0을 제거하여,
0을 하나만 남게 한다.
신규 아이디 추천
//신규 아이디 추천
class NewIDRecommendation {
val sb = StringBuilder()
fun solution(new_id: String): String {
// 1. 대문자 소문자로 변환
for (i in new_id) {
sb.append(Character.toLowerCase(i))
}
// 2. 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
sb.replace(0, sb.length, toRegex("[^a-z0-9-_.]", ""))
// 3. 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
sb.replace(0, sb.length, toRegex("\\.{2,}", "."))
// 4. 마침표(.)가 처음이나 끝에 위치한다면 제거
sb.replace(0, sb.length, toRegex("^[.]|[.]\$", ""))
// 5. 빈 문자열이라면, new_id에 "a"를 대입합니다.
sb.ifBlank { sb.replace(0, sb.length, "a") }
// 6. 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
// 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
if(sb.length >= 16) {
sb.replace(15, sb.length, "").also {
sb.replace(0, sb.length, toRegex("[.]\$", ""))
}
}
// 7. 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
if(sb.length <= 2) {
while (sb.length < 3) {
sb.append(sb[sb.length - 1])
}
}
return sb.toString()
}
private fun toRegex(regex: String, replacement: String): String = sb.replace(Regex(regex), replacement)
}