반응형
swift 문법을 배우면서 연습을 하기 위해서, codewars 문제를 몇 개 풀어보기 시작함.
gravity 라는 문제를 풀어봤다. 그냥 숫자로 주어진 리스트를 L 또는 R 인자에 따라 ascending, descending 으로 sort한 결과를 리턴하는 함수를 짜면 된다.
내 풀이는 다음과 같다.
func flip(_ direction:String, _ a: [Int]) -> [Int] {
if direction == "L" {
return a.sorted(by: >)
}
return a.sorted(by: <)
}
뭐 잘 푼 것 같은데... 문제를 풀고서 다른 이들의 솔루션들을 볼 수 있는데, 그 중에 가장 찬사를 맞이 받은 풀이( by Unnamed, Kawmen, 등의 답)는 다음과 같았다. 3항연산자를 사용했고, 나아가 >와 < 라는 두 람다 중에 하나를 선택하게 했다. 람다를 3항연산자로 선택가능하고 (그것도 간단한 신택스로) 코드가 예뻐서 블로그에서 한번 언급하고 싶었다.
codewars 를 풀면, 풀어내는 것도 중요한데, 이렇게 다른 사람들의 풀이를 보면서, 내가 잘 몰랐지만, 간결하게 해결해 내는 신택스등을 배울 수도 있어서 좋다. 전에 js 좀 연습할 때도, js의 람다랑 맵이랑 그런 거 우아하게 쓰는 거 많이 배웠던 것 같다. (그런데 까먹음. 우하하)
func flip(_ direction: String, _ a: [Int]) -> [Int] {
return a.sorted(by: direction == "L" ? (>) : (<))
}
이런 해법 공개하는 거 안 되는 건데, 이 문제는 문제만 잘 읽고 생각하면, 소팅만 하면 된다는 거 금방 알 수 있을 정도의 간단한 문제라서, codewars 를 소개하는 차원에서 포스팅한다.
codewars 괜찮은 플랫폼이다. 여러가지 언어들 연습할 수도 있고 문제들도 꽤 재미있고.
728x90
'프로그래밍 > 알고리즘' 카테고리의 다른 글
파이썬 자리수곱의합 (0) | 2022.07.18 |
---|---|
[EP 057] 2의 제곱근의 연분수 표현 (0) | 2022.06.08 |
[EP 047] 소인수분해의 소수의 갯수가 4개 (0) | 2021.12.30 |
[EP 078] 동전 나누기 (0) | 2021.11.05 |
[EP 077] 소수의 합으로 나타내는 경우의 수 (0) | 2021.03.12 |