본문 바로가기

프로그래밍/알고리즘

Swift codewars 연습문제 gravity

반응형

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