2024. 4. 4. 17:54ㆍ개발자 과정/Kotlin
https://school.programmers.co.kr/learn/courses/30/lessons/134240
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이의 선택과정
1. 문제 설명만 보면 어려워 보이지만, 하나씩 전부 연산할 필요는 없다.
2. 0번째는 물의 개수고 1고정이니까 패스하고 그 뒤부터 전체 순회한다.
3. 해당 원소의 /2만큼만 인덱스를 answer에 넣어준다.
4. 끝나면 중간에 고정으로 있는 물을 뜻하는 0과 문자열을 뒤집어 붙여주면 된다.
문제고민
더 깔끔하게 하고 싶다
= 솔루션은 나왔는데 이중 for문을 좀 더 깨끗하게 다듬는 방법은 없을까?
해결방안
repeat()을 쓴다.
= repeat() 은 함수 내부적으로 전달한 값만큼 for문을 수행하는 함수로,
람다로 식을 받아 처리한다.
내부적으로 0..times가 아닌, 0 untile times로 구현되어 있다고 한다.
1부터 시작하는 경우보다 0부터 시작하는 경우가 더 많은데,
이에따른 센스있는 설계라고 생각된다.
정답풀이
class Solution {
fun solution(food: IntArray): String {
var answer: String = ""
for(i in 1 until food.size)
{
repeat((food[i]/2)){answer+=i.toString()}
}
return answer+"0"+answer.reversed()
}
}
핵심로직
for(i in 1 until food.size)
{
repeat((food[i]/2)){answer+=i.toString()}
}
= 0번째 원소는 제외하고, 문자열을 만들때 repeat(food[i]/2)를 함으로, 알아서 짝수로 보정이 되니,
현재 인덱스를 더해주기만 하면 된다.
새로 알게된 것
필요에 따라 repeat()의 선택도 좋다
= 물론 경우에 따라 다르겠지만, 코드를 좀 더 깔끔하게 다듬고 싶거나 할때,
for문을 길게 늘여쓰지 않고, repeat()으로 간결하게 처리하는 것도 좋은 방법이라는 것을 알았다.
'개발자 과정 > Kotlin' 카테고리의 다른 글
(코딩테스트) 공원산책(copyOf()) (0) | 2024.04.08 |
---|---|
(코딩테스트) 콜라 문제 (0) | 2024.04.08 |
(코딩테스트)가장 가까운 같은 글자 (0) | 2024.04.03 |
(코딩테스트)두 개 뽑아서 더하기(mutableSet) (0) | 2024.04.03 |
(코딩테스트) 문자열 내 마음대로 정렬하기 (sortedWith) (0) | 2024.03.29 |