전체 글 55

99클럽 코테 스터디 11일차 TIL | Python 고차함수는 iterator를 반환한다

함수형 프로그래밍을 공부하다보면 map, filter, reduce, foreach 등을 사용하여 의도가 명확하게 드러나도록 코드를 작성하는 시도를 하게된다. 파이썬에도 이러한 접근을 돕기위한 빌트인 라이브러리가 존재한다. 그런데 반환값이 특이하다.map(변환람다, 원본리스트) # 람다를 적용한 변환 결과를 map 형태로 반환filter(변환람다, 원본리스트) # 람다 결과가 True인 것만 뽑아서 filter 형태로 반환zip(키배열, 밸류배열) # 튜플 iterator 반환 map, filter를 반환한다는 부분이 이해가 안될 수 있는데, 정말 반환 결과의 타입을 출력해보면 각각 map과 filter로 나온다.  그리고 아래처럼 map은 두번 사용할 수가 없다.def divide_arr(): i..

99클럽 코테 스터디 10일차 TIL | 백준 1253. 좋다 반례 (Python)

문제 링크 : 백준 1253. 좋다  /  정답 코드 바로가기  주어진 N개의 수 중에서 '좋은수'를 찾아야한다.좋은수란 다른 두 수의 합으로 나타낼 수 있는 수를 의미한다.값이 같아도 숫자의 위치가 다르면 다른 수로 취급한다. [1, 1, 2, 2, 2]예를 들어 위 케이스에서, 각 2는 모두 다른 수이므로 결과는 3이 되어야한다. 숫자 배열의 길이는 1 ~ 2,000 이며, 각 수의 범위는 -1,000,000,000 ~ 1,000,000,000 이다. 예시 케이스Case 1 ) input : [-1, 0, 1] / output : 1 -1 은 좋은 수가 아니다. -1을 제외한 [0, 1] 로는 -1을 만들 수 없다.0 은 좋은수이다. (-1) + (1) 을 더해서 만들 수 있다.1 은 좋은 수가 아니..

99클럽 코테 스터디 9일차 TIL | 다단계 칫솔 판매 반례 (Python)

문제 링크 : 프로그래머스 다단계 칫솔 판매 항상 자신의 추천인에게 판매 대금의 10%를 떼줘야하는 다단계 기업이 있다.10% 수수료 계산시 소수점을 버림하는 규칙이 있다.아래와 같은 4개의 배열이 주어질 때, 주어진 각 멤버의 수익을 계산해서 배열로 반환해야한다.빠르게 부모 노드를 찾을 수 있는 자료구조를 고안하는것과, 반례를 찾는것이 중요한 문제였다. 예시 케이스조직도가 [ 사장 - A - B - C ] 형태일 때, 인풋은 아래와 같이 주어진다. 조직도는 아래 형태로 주어지고 [0][1][2]enroll (멤버이름)ABCreferral (추천인)- (사장은 "-" 로 표시한다.)AB 칫솔 판매 실적은 아래처럼 주어진다. 칫솔은 하나에 100원으로 고정이다. [0][1][2]seller (판매 담당자)..

미라클모닝 6단계 요약

미라클 모닝최근 2030 세대 사이의 자기계발 트렌드를 꼽으라면 단연 ‘미라클 모닝’이다. ‘미라클 모닝’이란 아마존에서 종합 베스트셀러 1위를 기록한 뒤 2016년 한국에 출간된 베스트셀러 《미라클 모www.aladin.co.kr 매번 일찍 일어나면 미라클 모닝이라고 농담만 했지, 책은 처음 읽어봤는데 세간에서 말하던 것과는 내용이 많이 달라서 놀랐다.저자는 아래 6단계를 거치면 소풍날 같은 들뜬 기분을 매일 느낄 수 있다고 말한다.각 스텝은 1분 정도로 짧아도 되고, 심지어 아침에 하지 않아도 된다고 말한다. 점심시간에 잠깐 짬내서 해도 좋을 듯 싶다. 0. 아침잠 쫓는법- 알람시계 멀리 옮기기- 양치하고 물한컵 마시기- 운동복 입기- 아침에 안춥게 난방 잘하기- 기타 컨디션을 좋게 만드는 루틴 포함..

독후감/완성본 2024.10.27

[백준 14712] 넴모넴모 (Easy) Python 솔루션

문제 링크 : https://www.acmicpc.net/problem/14712 N x M 격자 안에 네모를 배열하되, 2 X 2 정사각형 모양이 없도록 하는 경우의 수를 구하는 문제이다.예를 들면 격자가 2 X 3 이라고 할 때 세어야하는 경우와 아닌 경우는 아래와 같다.  행의 개수 N, 열의 개수는 M으로 주어지고, 시간제한은 1초이다. (1 ≤ N, M ≤ 25, 1 ≤ N × M ≤ 25) 아무리 생각해도 모든 경우의 수를 만들어낸 후, 네모가 있는지 검사하는 것이 가장 확실하다는 생각이 들었는데, 이중 list를 사용하면 시간도 메모리도 초과할 것이 뻔했다. 게다가 이러면 네모 유무를 확인하는것도 어려웠다. 각 경우의 수를 검사하는 방식을 엄청나게 최적화 해야 최대 2 ^ 25 가지 경우의..

[백준 12015] LIS O(n log n) 알고리즘

문제 링크 : https://www.acmicpc.net/problem/12015 LIS는 최장 증가 부분 수열을 의미한다. 주어진 수열에서 숫자를 몇개 빼서 가장 긴 증가 수열을 만드는 것이 규칙이다. [0, 1, 2, 0, 5, 4]에 대해서 LIS를 찾는다고 하면, [0, 1, 2, 5] 또는 [0, 1, 2, 4]가 답이다. 부분 수열이 인덱스 i에서 끝날 때의 LIS 수열의 길이를 lis[i]라고 할 때, lis[i]에 대한 점화식을 적용하면 O(N^2) 해법을 쉽게 떠올릴 수 있다.def dp(arr): N = len(arr) lis = [1] * N for i in range(N): # 0부터 i까지 구간에서 부분수열의 최대 길이를 구한다. for k in ran..

[asdf] 디렉토리별로 다른 자바 버전 사용하기 (Mac, Linux)

코딩 테스트 연습에는 java 23을 쓰는데, Spring에 Java 21을 쓸 일이 생겼다.버전 맞추자고 도커를 돌리기는 너무 무거워서 asdf로 디렉토리별 자바 버전을 설정해주기로 했다. Mac (zsh 사용시)1. java와 asdf를 설치한다.brew install asdf \java 2. shell에 asdf를 추가한다.# asdf.sh 위치 확인find "$(brew --prefix asdf)/libexec/asdf.sh"# 환경변수 추가echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrc 3. asdf에 java를 추가한다.asdf plugin-add java https://github.com/halcyon/asdf-java.git..

기타 툴 2024.09.16

Python은 진짜 느릴까? : Python, C++, JS 실행시간 비교

코딩 테스트를 풀 때 필요에 따라 Kotlin, Python, JS를 번갈아가면서 써봤지만, 머리속 생각을 바로 코드로 옮기는 데에는 파이썬만한 언어가 없어서 거의 정착하게 되었다. 이런 결정을 할 때 신경쓰이는건 '파이썬은 느리다' 라는 평가이다. 시간 제한이 있는 문제도 있기 때문에 괄시할 수 없는 문제였다. LeetCode에서 같은 논리구조, 다른 언어로 솔루션을 올리는 사람들의 코드를 빌려 실행시간에 정말 유의미한 차이가 있는지 알아보기로 했다. 아래는 실행시간을 측정한 결과이다. 단위 : msC++PythonPython3JavaScriptSpiral Matrix IV5123860Split Linked List4264157Max Score2173159Min Count of BitFlip02534..

[JS] Map 사용하기 : prototype으로부터 안전하다

Map 자료구조란key와 value를 묶어서 저장할 때 유용한 자료구조이다.단순히 두 값을 묶을 뿐만 아니라, key를 통해 빠르게 저장된 값을 조회할 수 있다.따라서 map에서의 key는 항상 유일해야하며, 기준이 되는 연산자는 === 이다. Object와 비슷하게 보일 수도 있다. 실제로 여기 있는 기능 모두 object를 사용해서 구현할 수 있다.다만 Map 객체와 달리 Object는 프로토타입에 정의된 기본키를 가져서, 예상하지 못한 항목이 추가될 수 있다는 점이 다르다.object literal 표현식은 정말 인스턴스를 표현하거나 enum class를 구현할 때 사용하고,key - value 쌍을 저장하고 가공하기 위한 용도로는 명시적으로 Map 객체를 사용하는게 좋다고 생각한다. Map 초기화..

소프트웨어 장인 : 요약

책을 고른 이유개발 도서 추천을 받고 이것저것 뒤적거리던 중, 휘황찬란한 이론들 속 장인이라는 단어가 눈에 들어왔다.오버 엔지니어링과 하드코딩 그 사이 어디쯤 서있어야 내실있는 개발자가 될 수 있을지 이 책이 알려줄 것만 같았다.이 책을 통해 진짜 좋은 제품을 만드는 '장인'들은 어떻게 일하는지, 또 동료 장인을 행복하게 오래 일하게 하려면 어떻게 해야하는지 답을 찾고싶다. 챕터4. 소프트웨어 장인의 태도페어 프로그래밍 : 장인이 되는 길개발자들은 상당 수준의 지적 역량이 있기 때문에 혼자 배우고 싶다면 무엇이든 배울 수 있다. 문제는 시간이다. 더불어 스스로에게만 의존하면, 자신만의 좁고 편향된 생각에서 벗어날 방법이 없다.페어 프로그래밍으로 얻을 수 있는 것코드 짜는 즉시 피드백이 들어오므로 새로운 ..

독후감/완성본 2024.07.19