분류 전체보기 1187

[Python] enumerate 함수

개요 보통 Python에서 리스트에 대한 for문을 수행할 때는 아래와 같이 사용한다. message = ['Continue', 'Switching Protocol', 'Processing', 'Early Hints'] for msg in message: print(msg) 만약 index를 이용해 리스트에 저장된 원소를 접근해야 할 때는 다음과 같이 사용했었다. message = ['Continue', 'Switching Protocol', 'Processing', 'Early Hints'] for i in range(len(message)): print(i, message[i]) 다만 range를 이용해 접근하는 방식은 Pythonic 하지 않은 방법이라고 한다. 이 글에서는 Pythonic 하게 리..

Python 2023.08.24

[프로그래머스] 햄버거 만들기

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/133502 상수는 햄버거 가게에서 햄버거를 포장하는 일을 한다. 다른 직원이 햄버거 재료를 조리해 주면 조리된 순서대로 상수 앞에 아래에서부터 위로 쌓이고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 옮겨 포장한다. 상수네 햄버거 가게는 빵 - 야채 - 고기 - 빵 순서로 쌓인 햄버거만 포장하고, 상수가 포장하는 동안은 재료가 추가로 들어오지도 않는다. 재료가 쌓인 높이도 무시한다. 예로 들어, 상수 앞에 쌓인 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵] 일 때, 상수는 여섯 번째 재료가 쌓였을 때, 세 번째 재료부터 여섯 번째 재료를 이용하여 햄버거를 포장..

Algorithm 2023.08.23

[Python] pipdeptree - 패키지 의존성 확인

pipdeptree Python 환경에 설치되어 있는 패키지와 그 버전을 확인할 때는 pip list, pip freeze 명령을 사용하곤 한다. pip list pip freeze 간단히 패키지 정보를 확인하기엔 충분하지만 패키지 간의 의존성 등에서 충돌이 발생했을 때는 정보가 부족한 감이 있다. 이럴 때 패키지 간 의존성을 tree 형식으로 표시하는 pipdeptree를 사용하면 좋다. 설치 간단히 pip 명령을 이용해 설치할 수 있다. pip install pipdeptree 사용법 1. 환경 내 모든 패키지 의존성 확인 옵션 없이 사용하면 모든 라이브러리에 대한 의존성 tree를 출력한다. pipdeptree 위의 사진을 통해 launchpadlib라는 패키지는 httplib2, keyring, ..

Python 2023.08.22

[Git] sparsecheckout - 하위 디렉터리만 클론

sparsecheckout Git을 사용하다보면 레포지터리의 내용 전체가 아니라 일부 경로만 필요한 경우가 종종 있다. 이때 sparsecheckout 기능을 사용하면 필요한 경로만 관리할 수 있다. 비교적 최신 버전의 git에서 사용할 수 있다. 사용법 보통 신규 디렉터리를 만들어 git init 후 사용하는 것 같은데, 이 글에서는 checkout 없이 git을 클론 하여 사용해 본다. 예시로 사진의 Algorithm 레포지터리의 백준 디렉터리만 로컬 저장소고 가져와보자. 1. checkout 없이 클론 git clone -n # 예시 git clone -n https://github.com/jinyuo/Algorithm.git 로컬 저장소에 git 설정 파일 경로만 있고 내용물은 없는 것을 확인할 ..

Git | GitLab 2023.08.21

[Git] git clone 옵션

git clone git 레포지터리를 클론 할 때 크게 네 가지 옵션을 주어 클론 하는 것 같다. git clone git clone --no-checkout git clone --bare git clone --mirror git clone 명령을 사용할 때 -no-checkout 옵션을 사용하게 됐는데, 공식 문서를 봐도 이해가 잘 가지 않아서 정리해 본다. git clone 옵션 별 동작 방식 git clone 옵션 없이 clone을 수행하면 각 브랜치에 대한 remote-tracking 브랜치를 만들고, 초기 브랜치(master)를 만들고 checkout 한다. 즉, working tree에 소스를 다운로드한다. git clone --no-checkout checkout을 수행하는 부분을 제외하고 ..

Git | GitLab 2023.08.18

[Airflow] 스케쥴 설정이 있어도 스케쥴러에 의해 Dag가 실행되지 않는 경우

현상 3개월에 한 번, 한 달에 한 번 등 스케쥴 주기가 긴 Dag를 생성했다. 기본 Dag 매개변수는 아래와 같아서 스케쥴 시간이 되도 자동으로 실행되지 않아 처음에는 트리거하여 실행했었다. DEFAULT_DAG_ARGS = { 'depends_on_past': False, 'retries': 0, 'retry_delay': timedelta(seconds=20), 'provide_context': True, 'start_date': (datetime.now() - timedelta(days=2)), 'on_failure_callback': webhook.airflow_failed_callback, 'queue': 'default' } 이후에 스케쥴러에 의해 자동으로 실행될 거라고 기대했는데, 매번 실..

[프로그래머스] 신규 아이디 추천

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72410 카카오에 입사해 카카오계정개발팀에 배치된 신입 개발자 네오는 카카오 서비스에 가입하는 사용자의 아이디를 생성하는 업무를 담당하게 되었다. 네오에게 주어진 업무는 새로 가입하는 사용자가 규칙에 맞지 않는 아이디를 입력하면 입력한 아이디와 유사하면서 규칙에 맞는 아이디를 추천해 주는 것이다. 아이디 규칙은 다음과 같다. 아이디의 길이는 3자 이상 15자 이하여야 한다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없다. 네오는 다음과 같은 처리를 순차적으로 ..

Algorithm 2023.08.16

[프로그래머스] 대충 만든 자판

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/160586 컴퓨터 키보드 자판과 다르게 휴대폰의 자판은 하나의 키에 여러 개의 문자가 할당될 수 있다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀐다. 예를 들어, 1번 키에 "A", "B", "C" 순서대로 문자가 할당되어 있다면 1번 키를 한 번 누르면 "A", 두 번 누르면 "B", 세 번 누르면 "C"가 된다. 동일한 규칙으로 만든 휴대폰 자판이 있다고 하자. 이 휴대폰 자판은 키가 1개부터 최대 100개까지 있을 수 있으며, 특정 키를 눌렀을 때 입력되는 문자들도 무작위로 배열되어 있다. 같은 문자가 자판 전체에 여러 번..

Algorithm 2023.08.15

[Linux] 디렉터리 내 모든 파일/디렉터리 권한 확인

개요특정 디렉터리 내 모든 하위 경로에 대한 읽기/쓰기/실행 권한을 확인하고자 한다. 명령어를 찾아보자.   ls - find 명령find 명령으로 특정 경로에 존재하는 파일과 디렉터리를 찾아 ls 명령의 인수로 전달한다. 하위 디렉터리만 조회ls -dl `find /PATH -type d`# -d, --directory : 디렉터리만 나열# 예시ls -dl `find /var -type d` 파일만 조회ls -dl `find /PATH -type F`# -d, --directory : 디렉터리만 나열# 예시ls -dl `find /var -type f`  find -ls 옵션 사용find 명령의 -ls 옵션은 ls -dils 형식으로 파일 목록을 출력한다. 하위 디렉터리만 조회find /PATH -ty..

Linux 2023.08.14

[Pandas] DataFrame CROSS JOIN

CROSS JOIN CROSS JOIN은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 것을 뜻하며, 두 테이블의 각 행의 개수를 곱한 만큼의 결과가 나온다. Pandas DataFrame을 join 하는 법은 2022.12.25 - [Python] Pandas - 데이터프레임 합성 1 (merge / join)에서 살펴보았는데, cross join에 대해서는 정리하지 않아서 추가로 정리한다. pandas 1.2 이상의 버전인 경우 위의 예시 그림처럼 hair type과 hair style 두 개의 DataFrame이 있다고 하자. import pandas as pd import numpy as np hair_type = pd.DataFrame({'Hair Type' : ['A', 'B'..