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 값이라는 것.


리눅스를, 우분투를 처음 설치해서 사용했을 때 의미를 모르고 무작정 따라했던 두 가지 명령어



apt-get update

: 사용 가능한 패키지들과 그 버전들의 리스트를 업데이트 하는 명령어. 

 실제 패키지 버전을 업그레이드하는 것이 아니라 최신 버전 패키지가 있는지를 확인하고 내 우분투에 알려주는 용도.



apt-get upgrade

: 내 우분투에 있는 패키지들을 실제로 최신 버전으로 업그레이드 하는 명령어. 

여기서 최신 버전이란 위의 apt-get update 명령어를 수행했을 때 확인된 최신 버전이겠지?



강제로 예외를 발생시켜야 하는 상황이 있다... 는 걸 그동안은 경험해 볼 일이 없다가

회사에서 뭔가를 만들다가 경험하게 되었다.

회사 조직도를 참고해서 부서의 상하 관계를 파악해야 할 일이 있어서 이걸 코딩으로 해결하는 과정에서 공부한 것.

raise 라는 키워드(?)를 사용해서 Exception 을 일으키면 된다. 



예제



마침 디자인 패턴에 대해 설렁설렁 공부하던 때라 Composite pattern을 이용해서 부서 상하관계를 파악하기로 했었다.

참고사이트(http://iilii.egloos.com/3838064)를 보며 구현했는데, Tree의 Leaf node에 child를 추가하려고 하면 에러가 발생해야한다는 걸 보고 이럴 때 예외를 강제로 발생시킬 수 있구나 했다.

실제로 문제를 해결할 땐 Leaf 클래스를 사용할 일이 없긴 했지만 예외를 강제로 발생시켜야 하는 상황의 필요성에 대해 조금이나마 알게 되었으니 포스팅을 남긴다.

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

[Python] list 자료형에서 한글 출력  (0) 2016.08.06
[Flask] 리눅스 우분투 Flask 설치  (0) 2016.07.06

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 - 정규표현식

+ Recent posts