아 으아ㅏ아아아아 글 다 썼는데 날아갔어....귀찮아ㅠㅠ

 

Description:

[ id, email ] 형식의 element를 갖는 리스트에서 id의 마지막 캐릭터가 '_' 인 element의 리스트를 리턴하는 문제.

입력 값과 리턴 값의 형식은 아래와 같다.

input   :  [ [ "foo", "foo@foo.com" ], [ "bar_", "bar@bar.com" ] ]

output :  [ [ "bar_", "bar@bar.com" ] ]

 

 

 

My Solution:

어떻게 해서든 lambda를 사용해서 풀고 싶었다.

처음에는 function을 선언해서 문제를 해결한 후에 그걸 lambda 형식으로 변경함.

아래는 처음에 짰던 코드.

 

 

 

 

Solution by Others:

slice(-1) 을 하면 훨씬 간결하구나. 어레이의 인덱스에 음수값을 사용하는 것이 아직 익숙하지 않다.

그리고 난 true, false를 리턴하는 문장을 직접 작성했는데 여기서는 비교연산의 결과를 바로 리턴한다.

난 왜 매번 이 생각을 못하지? 다음번에는 꼭 기억해야지.

 

 

 

배운점:

* slice() 메소드

* true / false 를 리턴할 일이 있으면 비교 연산의 결과를 바로 리턴할 수 있는지 생각해보기

Description:

리스트에서 가장 큰 수와 그 다음으로 큰 수의 합을 구하는 문제.

리스트에는 적어도 2개 이상의 element가 있고 각 element는 모두 숫자이다.

 

 

 

My Solution:

지난번에 spread operator 배웠으니까 그거 한 번 써봤음 ^^*

 

 

 

Solution by Others:

이 방법처럼 sorting 한 후에 인덱스 순서대로 리턴하는 방법도 생각했다.

근데 numbers.sort() 하면 음수의 경우 절대값 크기 순서로 정렬되더라구?

제대로 정렬할 수 있도록 하는 방법을 몰라서 이 방법은 포기함. (사실 방법 검색하기 귀찮아서)

 

 

 

Solution by Others:

Spark 를 개미 눈꼽만큼 배우면서 Scala도 개미 눈꼽만큼 배웠는데 그 때 lambda를 조금 사용했었다.

개인적으로는 이 방법이 가장 깔끔한 코드인 것 같다.

 

 

 

배운 점:

* array.sort() 는 음수를 정렬할 땐 절대값 크기 순서대로 정렬된다는 것.

 →  이를 바로잡기 위해선 자바에서 comparator 넘겨주듯이 compareFunction을 넘겨줘야 함.

 

 

 

참고:

Description:

리스트의 원소의 총 합을 구하는 문제. 리스트에 원소가 없으면 0을 리턴.




My Solution:

요즘  어쩌다가 Hadoop과 Spark에 대해 맛보기 정도로 배우고 있는데 

하둡에서의 MapReduce에 대해 개미 눈꼽만큼 배워본 기념으로 reduce 함수를 써보았다ㅋㅋㅋㅋㅋ

이때까지만 해도 난 뿌듯했어... 아래에 있는 다른 사람들의 문제 풀이를 보기 전까진...




Solution by Others:

보자마자 육성으로 헛웃음 나옴ㅋㅋㅋㅋㅋㅋㅋㅋ역시 필요한 기능은 이미 다 구현되어 있어....

나름 reduce라는 고난이도(?) 기술을 써서 코딩해서 뿌듯해하고 있었는데 

이건 뭐 더하기 빼기 하려고 공학용 계산기 산 기분?




Solution by Others:

이 생각도 안 한 건 아닌데 초기값을 주면 리스트에 원소가 하나도 없는 경우에도 적용되는 줄은 몰랐다.

뭐... 이제 알았으니 됐지 ^^*




배운 점:

* reduce 함수에 초기값 지정해주면 리스트에 값이 없어도 적용된다는 것

* 내가 필요로 하는 웬만한 기능은 이미 파이썬에 다 구현되어 있으니 믿을 지어다


Description:

주어진 리스트에서 가장 작은 숫자를 제거한 리스트를 리턴하는 문제. 단 리스트의 원소의 순서는 변경되어서는 안 되며 최소값을 가진 원소가 여러개일 경우엔 가장 먼저 나온 원소를 제거한다.



My Solution:

설명할 것이 없다. 그냥 그대로 풀었음.

자바스크립트는 언어를 공부하지 않고 그냥 심심풀이겸 문제만 풀고 있기 때문에 허접해도 괜...찮.... >.<

공부해야지 해야지 말만 하고 손 놓고 있다.




Solution by pwynn:

?????? 당황....ㅎ....

어레이 앞에 "..." 은 어떤 용도로 쓰이는 거지? 검색해보니 'spread operator' 라고 한다. 

함수에 여러개의 인자를 전달하거나 배열에 여러개의 element를 전달(?)하려고 할 때 확장(?)해서 쓸 수 있다고 한다.


내가 이해한 바를 통해 예를 들자면, 

3개의 argument를 필요로 하는 함수 func(arg1, arg2, arg3) 가 있고 이 함수에 

arr=[1,2,3] 의 원소를 하나씩 argument로 전달하고 싶을 때 

func(arr[0], arr[1], arr[2]) 이렇게 쓸 수도 있지만 func(...arr) 이렇게 쓸 수도 있다는 뜻인 것 같다.

또한 arr의 원소를 포함하는 어떤 임의의 어레이를 선언하고자 할 때 

temp=[arr[0], arr[1], arr[2], 4, 5, 6] 이렇게 쓸 수도 있지만 temp=[...arr, 4, 5, 6] 이렇게도 쓸 수 있다는 뭐 그런 거 아닐까? 파이썬의 extend 메소드가 생각난다.





Solution by crazyYuyang:

apply 함수가 뭔지 모르겠어서 검색해보았다.

어떻게 쓰는 지는 대충 알겠는데 어디에 쓰이는 거지? 이건 나중에 쓰임새를 검색해봐야지. (귀찮아 헿....)





배운점:

* spread operator

* apply, call 함수 (이건 배웠다기 보단 이런게 있구나!? 를 알았다)



참고:


Description:

주어진 스트링에서 3자리 이하의 자리수를 가진 숫자를 추출(?) 해서 그 숫자가 cubic number인지를 판별한다. 

입력 값이 "123ab##45 0123456" 라면 여기서 추출가능한 숫자는 123, 45, 012, 345, 6이다.

※ cubic number = 어떤 숫자 A의 각 자릿수를 3제곱한 값을 모두 더한 값이 A와 같으면 cubic number라 한다.

예시: 아래의 153은 cubic number이다.

153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153


return 값은, cubic number가 하나라도 있을 경우 모든 cubic number를 나열한 뒤 각 cubic number들의 총 합과 "Lucky"를 출력하고, cubic number가 없을 경우엔 "Unlucky"를 리턴한다.

예시: 0, 1, 153은 cubic number이고 154는 cubic number들의 총 합이다.

0 1 153 154 Lucky





My Solution:

Regular expression 사랑합니다.

참고: http://stackoverflow.com/questions/26825729/extract-number-from-string-python





Solution by "lechevalier"

논리는 같은 것 같은데 훨씬 간결하다. 

특히 cubic_numbers 를 구하는 라인에서 감동받음... 난 언제쯤 렙업하지?ㅠㅠ






배운점:

* d{1,3} : Regular Expression에서 1자리수 ~ 3자리수를 뜻하는 표현

* sum() 함수 안에서  argument로 for loop 사용!




근데... 내 블로그 글은 왜 이렇게 난잡하지? 깔끔하지가 않다ㅜㅜ 어려서부터 미술 관련 과목 및 과제는 정말 못했었는데 여기서도 티가 나나봐 ㅜㅜ

Task:

전체 경로에서 현재 경로와 다음 경로가 서로 정반대이면 경로에서 현재와 다음 경로를 제거해나가는 문제.

예를 들어 전체 경로에서 현재 경로가 NORTH인데 다음 경로가 SOUTH이면 현재 경로인 NORTH와 다음 경로인 SOUTH를 전체 경로에서 제외한다. 이 과정을 계속해서 수행해서 인접한 경로가 서로 정반대의 경로가 아닌 것만 남도록 하는 문제. (난 분명 한국말을 하고 있는데....무슨 말이지)

경로는 NORTH, SOUTH, EAST, WEST 네 가지가 있다.

아래는 예시. 왼쪽이 전체 경로, 오른쪽이 경로 수정 과정을 거친 최종 경로.


['EAST','NORTH', 'NORTH', 'SOUTH', 'SOUTH','WEST','WEST] → ['WEST']


즉... 괄호 문제인거지. EAST, WEST를 각각 [ , ] 에 대응시키고 NORTH, SOUTH를 ( , ) 에 대응시킨다고 하면


[ ( ( ) ) ] ] → ]


이렇게 되는 셈.  짝이 맞는 괄호들을 제거하는 문제.



My Solution:

아쉬운 점이 있다면, dictionary를 함수 안에 선언한 것. 함수를 콜 할때마다 생성되잖아!! 밖에다 선언할 걸. 

그리고 다른 분의 풀이를 보고 깨달은 건데 if len(stack) == 0 이렇게 말고

if stack and stack[len(stack)-1] == opposite[i] 이렇게 짰으면 if 문을 덜 중첩시킬 수 있었겠구나.



배운 점:

list에 원소가 아무것도 없으면 boolean으로 false 값이라는 것.


Description:

Return the number (count) of vowels in the given string.

We will consider a, e, i, o, and u as vowels for this Kata.



My Solution:



javascript를 공부해보려고 한다. 입문서를 사서 읽어봐야하는데 이번 달엔 돈이 없당....힝.. 

일단은 문제를 조금씩 풀어봐야지.




배운점:

1. Sting.match(arg) 메소드. String에서 arg와 일치하는 문자열을 리턴. arg에는  Regular Expression(Regex, 정규표현식) 사용 가능.

2. /<조건>/g : Regex에 g를 붙이면 조건에 일치하는 모든 결과를 출력해준다.

3. javascript에서 Regex 표현 방법

    var i = /a/

    var i = new RegExp('a')



참고:

https://opentutorials.org/course/743/6580  생활코딩 - javascript - 정규표현식

Task:

입력받은 이름을 가진 직원의 role을 return 해주는 문제. 

입력받은 이름을 가진 직원이 없을 경우 "Does not work here!"를 return한다.

employees라는 리스트는 preloading 되어 있으므로 그대로 사용하면 된다는 전제조건이 있었음.

employees의 구조는 아래와 같다.

 employees = [ {'first_name': "Dipper", 'last_name': "Pines", 'role': "Boss"}, ...... ]

중복되는 이름을 가진 직원은 없으며, 입력값은 'first name + 스페이스바 + last name' 혹은 'name + 스페이스바' 이런 식으로 주어진다는 것 같다.

내가 제대로 이해한 건가...? 다음부터는 문제를 그냥 복붙해야겠다. ;_;



My Solution:

만약 입력값이 name 한 단어로만 들어오면 first_name과 last_name중에 뭐랑 비교를 해야하는 건지 고민했는데

그냥 단순하게 저렇게 풀어보니 되길래. 

내가 영어를 잘 못해서 문제를 제대로 이해 못 한 건지,

name이 한 단어만 들어올 경우 어떤 포맷으로 들어오는지 확실히 이해하지 못했다. 때려 맞춘 셈 ^^;



Best Solution은 나와 풀이가 같으므로 생략.

return문 한 줄로 코드를 끝낼 수 있나 고심해봤지만 안 될 것 같아서 그냥 내가 푼 것 그대로 제출했는데,

다른 사람들도 그렇게 안 푼 것을 보니 이번 문제는 그렇게는 안 되는 문제였나보다. ^^*

'잡동 > programming practice' 카테고리의 다른 글

#6 [Codewars] Directions Reduction (Python)  (0) 2016.05.19
#5 [Codewars] Vowel Count (javascript)  (0) 2016.05.18
#3 [Codewars] Counting Duplicates  (0) 2016.05.09
#2 [Codewars] Flatten  (0) 2016.04.28
#1 [Codewars] Give me Diamond  (0) 2016.04.27

+ Recent posts