-
리뷰 뒤늦게 써보는 2년 뒤에 쓰는 CKA 시험 후기 ✅ 시험 보기 전에처음엔 유데미아 유명한 인도 아조씨 강의 듣다가,, 한국식 공부법에 익숙한 나는따베씨 유튜브 강의로 갈아탐https://www.youtube.com/@ttabae-learn TTABAE-LEARN리눅스 도커 쿠버네티스 클라우드 빅데이터 ICT 스터디를 통해 IT를 배우고 4차산업을 이끌어가는 그릇을 준비합시다. 강사 이성미가 전하는 ICT 이야기www.youtube.com → 솔직히 시험 내용이 거의 그대로 나온다고 보면 된다. 강의 잘 따라가면 문제 유형 익히는 데 매우 도움 된다.→ 실습도 따라하면서 한 번씩 손에 익히는 게 중요하다!! 시험 날Document 복사 안 돼서 당황했다.kubernetes 공식 docs를 열 수 있긴 한데, 맥북 복사해서 붙여넣는 게 안 됐었다. 알고보..
-
Data Science [Alteryx] 알터릭스 Join, Transform, Parse Tools Join ToolsJoin Tool데이터를 서로 연결하거나 비교할 때 쓰는 도구들이다.Join Tool: 두 데이터 소스를 공통 필드(예: ID) 기준으로 합쳐준다. (Join by Specific Fields)Inner Join(J) / Left Join)(L) / Right Join (R) 개념이 전부 포함돼 있다. SQL의 INNER JOIN, LEFT JOIN, RIGHT JOIN 개념을 모두 하나의 툴 안에서 처리할 수 있다는 게 장점이다.Join by Specific Fields가장 일반적인 조인 방식으로, 사용자가 지정한 특정 필드(예: 고객ID, 제품코드 등)를 기준으로 데이터를 조인한다.Join by Record Position필드값이 아니라, 행의 순서(레코드 포지션)를 기준으로 조인..
-
Data Science [Alteryx] 알터릭스 Select | Data cleansing | Filter | Formula | Sample | Unique Tool Select Tools필드를 선택하거나 제외하고필드의 데이터 타입 변경, 필드명 변경 등을 할 수 있는 기본 중의 기본 툴Unknown 필드란?Unknown 필드는 데이터셋에 새로운 열(column) 이 생길 때 대비한 옵션이야.예를 들어, 나중에 누군가가 원본 데이터에 새로운 열을 추가하더라도,Unknown 체크 ON: 새로운 열도 자동으로 포함됨Unknown 체크 OFF: 새로운 열이 있어도 워크플로우에 영향을 안 줌 체크 해제하면 내가 지정한 필드만 들어와서 예상치 못한 열이 들어오는 걸 방지할 수 있음기능설명필드 선택/제외불필요한 필드를 제거하여 워크플로우를 단순화필드명 변경 (Rename)필드의 이름을 직접 수정 가능데이터 타입 변경각 필드의 타입을 String, Int, Bool 등으로 변경 ..
-
Data Science [Alteryx] Input Tools 알터릭스 입력 툴 Input Data Tool - Excel가장 기본인 엑셀 데이터 열기 ! In/Out에서 Input Data를 드래그해서 가져오면~~~이렇게 생긴다 ! Upload File을 선택하면 어떤 시트에서 어떤 데이터를 불러올지 configuration 을 설정할 수 있다.Create Dataset을 누르면~~ 데이터 파일이 불러와진 것을 알 수 있다!여기에 있는 이 화살표를 앵커 (Anchor)라고 한다고함.툴에 종류에 따라 앵커가 왼쪽/오른쪽/양쪽에 있을 수 있음.하단 우측에서 Metadata View를 클릭하면 메타 데이터를 확인할 수 있음record limit : 데이터로 불러올 수 있는 행 수 제한file format : 파일 형식 (csv, excel ..)Search subdirectories :..
-
Data Science [Alteryx] 알터릭스란? 설치 방법 부터 데이터 종류까지 Alteryx란?End-to-end data analytics platform데이터를 처음 준비하고 cleansing하는 prep단계, 여러개의 데이터를 합치는 Blend단계, 변형하고 조작하여 분석을 하는 analyze단계까지 모두 수행 가능직관적인 인터페이스워크플로우를 만들면 재사용이 가능, 자동화 가능Alteryx 는 3가지 Certificate가 있음. Core가 가장 기본.미국에서 채용이나 프로젝트 참여에 여러모로 요구되는 자격증..이라고 함. 설치 방법https://www.alteryx.com/designer-trial/free-trial-alteryx Start Free TrialFind powerful insights with 300+ no-code, low code automation b..
-
Data Science [TimeSeries] Stationarity 시계열 정상성, 왜 따지는걸까? 시계열 분석을 하면 정상성 검정을 수행한다. 졸업한지 벌써 3년이 지나가는 지금,,, 정상성을 따지는 과정이 너무 익숙하고, 왜 수행했는지? 기억이 희미하다. 이 포스팅에서 시계열 데이터에 대해 알아보고, 시계열 데이터의 정상성에 대해 정리하고자 한다. What is a time series?time series is a set of observations taken sequentially in time.시간에 종속적으로 측정된 데이터들의 집합을 말한다. 흔히 말하는 시계열이라고 하면 주식! 을 떠올릴 수 있다.아래 그램에 보이는 일정한 시간에 (예를들면 종가) 관측된 비트코인의 가격이 대표적인 시계열 데이터의 예시이다. Types of time seriesRegular time series : co..
-
Data Science [Causal Inference] 1. Introduction To Causality 인과추론이란 | 심슨의 역설 인과추론이란 무엇인가 Correlation Does not Imply Casationhttps://tylervigen.com/spurious-correlationsSpurious correlationsSpurious correlationstylervigen.com위의 사이트는 가짜 인과관계(spurious-correlations)를 모아놓은 사이트입니다. Nicolas Cage의 영화 수와 익사한 사람의 수의 상관관계 등.. 다양하게 말이 안되는 예시들이 존재합니다. 이렇게 명확하게 가짜 상관관계임을 알기 쉬운 예시도 있지만, 현실에서의 문제는 직관적으로 판단하기 어려운 경우가 많습니다. 비슷한 유저에게 비슷한 상품을 추천해주는 협업필터링 알고리즘의 효과를 측정해 본다고 했을 때, 다음과 같은 질문을 ..
-
Data Engineering [opensearch | elasticsearch] maximum shards open 문제 문제 RequestError(400, 'validation_exception', 'Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [999]/[1000] maximum shards open;') 가끔 elasticsearch를 사용할 때 종종 발생했던 문제인데 opensearch를 사용할 때도 또 만나서 정리.. 원인 이 에러는 Elasticsearch /Opensearch 클러스터가 설정된 최대 샤드 개수를 초과하려고 할 때 발생한다. 각 인덱스는 여러개의 샤드로 분할되고, 클러스터 전체에서 허용되는 최대 샤드 수가 설정된다. 현재 1000개의 샤드가 설정되어있고, 999개의 샤드가 열..
-
논문 [논문요약] SCINet: Time Series is a Special Sequence (2021) Introduction There are mainly three kinds of TSF(Time Series Forecasting) methods using deep neural networks. (i) RNNs (ii) Transformer-based model (iii) TCN (temporal convolutional network) Despite the promising results of TSF methods, they do not consider the speciality of time series. In time series sequence, the temporal relations are largely preserved after downsampling into two sub-sequenc..
-
MLOps | Infra [k8s] python sdk를 이용해 Pod 내에서 Kubernetes API 사용하기 방법1. config file 사용 config.load_incluster_config() v1 = client.CoreV1Api() pod내부가 아닌 경우엔 load_kube_config() 를 사용하지만 pod내부에서 config file을 로드할 때는 load_incluster_config() 를 사용한다. 방법 1을 사용해도 권한이 없어서 403 errors 가 발생할 수 있다. 이런 경우에 클러스터롤바인딩이 필요하다. 관련 내용은 kubernetes-client github에서 확인할 수 있다. 더보기 Shows how to load a Kubernetes config from within a cluster. This scriptmust be run within a pod. You can sta..
-
MLOps | Infra [kubeflow] kfp.dsl을 사용한 pod scheduling node에 기존에 있는 pod 옮기기 kubectl drain worker-1에 실행되고 있던 기존 잡들을 다른 노드로 옮기기위해 drain 명령을 실행합니다. drain 이 실행되면 cordon의 과정이 포함되므로 어떤 파드도 스케줄링되지 않습니다. 다른 node에 pod가 이동하는 것으로 보이지만 실제로는 기존 노드에서 실행되고 있던 파드들을 삭제한 후 다른 노드에서 재생성하는 과정이 진행됩니다. 이때, replica set에 있는 pod들은 다른 노드에서 살아나지만, 그렇지 않은 pod들은 복원되지 못한다는 것에 주의해야합니다. -ignore-daemonsets=true option을 설정하면 데몬세트로 실행한 파드들을 무시하고 드레인 설정을 적용할 수 있습니다. kubectl uncordon 원하..
-
MLOps | Infra [k8s] Backup and Restore Methods Backup and Restore Methods Backup Candidates Resource Configuration ETCD Cluster Persistent Volumes Backup - Resource Configuration Resource Configuration의 경우 declarative 한 방식을 사용하는게 configuration을 저장하기 위해 좋다. declarative한 방식을 사용했을 때, 가장 좋은 방식은 yaml을 git에 저장해 버전 관리를 하는 것이다. declarative 한 방식과 imperative한 방식을 모두 사용할 수 있으므로 resource configuration backup을 위한 최선의 방법은 query the API server이다. kubectl g..
-
MLOps | Infra [k8s] Cluster Upgrade Process Cluster Upgrade Process cluster upgrade kubernetes components들이 서로 다른 release version을 가질 수 있는데 나머지 components들은 kube-apiserver release verison 보다 클 수 없다. controller manager, scheduler는 kube-apiserver보다 1 version만 낮을 수 있다. kubelet이랑 kube-proxys는 2 version보다 낮을 수 있다. kubetl은 kube-apiserver보다 한 버전이 높거나 낮을 수 있다. 하위 버전을 지원한다는 특성 때문에 live upgrases가 가능하다. k8s는 기본적으로 최신버전 - 3 까지만 지원을 해준다. upgrades는 one..
-
MLOps | Infra [k8s] drain and cordon OS Upgrades : cluster의 노드를 유지보수(ex. Security path)를 위해 안정적으로 내리려면 어떻게 해야할까? node를 내리려고 할 때 5분안에 node를 살리면 pod가 실행되지만 5분이 지나면 pod는 terminated 된다. 이것은 kube-controller-manager에서 --pod-eviction-timeout=5m0s이 defalut 값이 5분으로 설정되어 있기 때문이다. pod eviction time이후 노드가 다시 생성되었을 때 replica set에 있는 pod들은 다른 노드에서 살아나지만, 그렇지 않은 pod들은 복원되지 못한다. 만약 노드가 다운되는 시간이 5분 이내일 것으로 예상되면 quick upgrade나 reboot가 가능하지만, 그렇지 않을 ..
-
MLOps | Infra [k8s] Multi Container PODs Multi Container PODs WEB Server와 LOG Agent를 함께 동작시켜야한다든지 여러개의 컨테이너를 한번에 실행시켜야하는 경우 Multi-Container Pods를 사용할 수 있다. Multi-Container PODs Design Pattern 파드로 여러 개의 컨테이너를 묶어서 구성하고 실행할 때 몇가지 패턴을 적용할 수 있다. Sidecar pattern 원래 사용하려던 기본 컨테이너의 기능을 확장하거나 강화하는 용도로 컨테이너를 추가하는 것 기본 컨테이너는 원래 목적의 기능에만 충실하도록 구성하고, 나머지 공통 부가 기능들은 사이드카 컨테이너를 추가해서 사용 ex. 웹서버 컨테이너 - 로그 수집 컨테이너(사이드카 역할) 로 설정하면 웹 서버 컨테이너를 다른 역할을 하는 컨테..
-
MLOps | Infra [k8s] Application Lifecycle Management Application Commands & Arguments docker image의 entrypoint의 argument는 spec.containers.args에 명시해준다. spec.containers.args는 Docker file의 CMD opiton을 overrride한다. Docker file의 ENTRYPOINT를 override하기 위해서는 spec.containers.commad를 사용한다. Configure Environment Variables in Applications 환경 변수를 설정하기 위해 pod-definition.yaml에서 spec.container.env property를 사용한다. 예시 apiVersion : v1 kind : Pod metadata : name : s..
-
MLOps | Infra [k8s] Rolling Updates and Rollbacks Rolling Updates and Rollbacks Deloyment Rollout and Versioning Deployment를 생성하면 rollout이 트리거되면서 새로운 버전의 deployment Revision1이 생성된다. 이후 컨테이너가 업데이트되면 새로운 rollout이 트리거되면서 새로운 버전의 deployment Revision2가 생성된다. 이것은 버전의 변화를 트랙하고, roll back 을 가능하게 한다. Rollout Command kubectl rollout status deployment/myapp-deployment - 히스토리 보기 kubectl rollout history deployment/myapp-deployment Deployment Strategy 1.Recr..
-
MLOps | Infra [k8s] Managing Application Logs Managing Application Logs 컨테이너 오케스트레이터를 사용하는 환경에서 로그를 수집할 때 주의해야할 점 중 하나는 특별한 상황을 제외하고는 로그를 로컬 디스크에 파일로 저장하지 않아야 한다. 전통적인 애플리케이션 운영환경에선 로그를 로컬 디스크에 저장하고 일정 시간 이상 저장하거나 일정 용량이 되면 오래된 로그를 삭제한다. -이런 방식은 지정된 장비에서 실행된다는 것을 가정하므로 문제 발생시 로그를 확인해야한다. 컨테이너 오케스트레이터를 사용하는 시스템이면 컨테이너가 상황에 따라 클러스터 안의 여러 노드를 옮겨다니기 때문에 로그를 일일히 확인하는 것이 어렵다. 따라서 어떤 클러스터의 노드 중 어떤 컨테이너가 실행되었는지를 확인해야 로그를 확인할 수 있다. 파드 로그 확인하기 kubect..
-
MLOps | Infra [k8s] Monitor Cluster Components Monitor Cluster Components Monitor 쿠버네티스에서 기본적인 시스템 메트릭인 CPU, Memory 부터 클러스터에 노드 수, 컨테이너 상태 등 많은 것을 모니터링 해야한다. 이런 것들을 모니터링하고 metric을 저장하고 분석하기 위한 솔루션이 필요한데 쿠버네티스는 이 모든것들을 제공하지는 않기 때문에 Prometheus, Metrics-Server, ELK, Datadog, Dynatrace같은 오픈소스 솔루션들이 필요하다. Heapster vs Metric Server Heapster는 kubenetes를 모니터링하기 위한 오리지널 프로젝트였지만 현재는 사용되지 않는다. Metric server는 쿠버네티스 모니터링 아키텍처에서 core metric pipeline을 효율적으..
-
MLOps | Infra [k8s] Kubernetes Monitoring Architecture Kubernetes Monitoring Architecture : 클러스터의 상태와 클러스터 안에 실행 중인 파드들을 모니터링 하는 방법에 대해 알아보자. system metrics service metrics core metric pipeline monitoring pipeline system metrics 노드나 컨테이너의 CPU, Memory utilization 같은 시스템 관련 메트릭 1.core metrics 쿠버네티스 내부 컴포넌트들이 사용하는 메트릭 현재 클러스터 안이나 내장 오토스케일링에서 사용할 수 있는 자원이 얼마인지 파악 kubectl top command에서 보여주는 cpu/memory 사용량, pod/container의 disk 사용량 등 2.non-core metrics k8s..
-
MLOps | Infra [k8s] Multiple Schedulers Multiple Schedulers node에 pod를 스케줄링하기 전에 custom condition을 체크하는 자체적인 스케줄링 알고리즘을 만들고 싶을 경우 default scheduler에 스케줄 프로그램을 deploy하거나 추가적인 scheduler를 쿠버네티스 클러스터에 추가할 수 있음 애플리케이션 마다 다른 스케줄러를 이용할 수 있다. 예를들어, 다른 app은 default를 사용하게하고, 특정 app은 custom scheduler를 사용할 수 있다. pod를 생성할 때 어떤 스케줄러를 사용할지 정의할 수 있다. Deploy Additional Scheduler kube-scheuler binary를 다운로드 받은 후 옵션과 함께 서비스로 실행한다. additional scheduler를 d..
-
MLOps | Infra [k8s] static pod Static pod 스태틱 파드란? kube-apiserver를 통하지 않고 kubelet이 직접 실행하는 파드 kubelet이 직접 관리하고, 이상이 생기면 재시작 지정한 디렉터리에서 yaml파일들을 kubelet이 읽고 파드를 생성하고, 계속 파드가 유지되도록 관리함 파드만 생성할 수 있고, replica나 deployment는 생성 못함 kubelet은 오직 pod level에서만 작동 kubelet이 실행중인 노드에서만 실행되고 다른 노드에서는 실행되지 않음 kube-apiserver는 조회는 할 수 있지만 스태틱파드에 어떤 명령을 실행할 수는 없음 kubectl get pods 명령어로 static pod도 조회 가능 kbuelet이 pod를 생성하면 kube-apiserver가 mirror o..
-
논문 [논문요약] DLinear, NLinear ( LTSF-Linear ) 리뷰 Are Transformers Effective for Time Series Forecasting? Abstract 원문 바로가기 논문은 다음과 같은 질문에서 시작합니다. 시계열 예측에 Transformer기반 모형을 적용하는게 정말 효과적일까? transformer를 활용한 LTSF(long-term series forecasting)에 관현 연구가 지난 몇년 간 좋은 성과를 보였습니다. transforemr는 긴 시퀀스 사이에 semantic(의미론적) 상관관계를 추출하는데 가장 성공적인 방법인 것은 맞지만, 시간적 관계를 추출해야하는 시계열 예측 모델링에선 아래와 같은 이유로 단점이 존재합니다. transformer가 순서가 있는 정보를 저장하는 것을 가능하게 하기 위해 positional enco..
- etc 구글드라이브에 있는 문서 서버로 옮기기 cd datasetsgdown https://drive.google.com/drive/folders/1KFFJkYybPNqKOH3rAyzKmE2H7Ih_ypRU -O /tmp/folder --foldercd ..
-
Data Engineering [elasticsearch] elasticsearch 10000개 이상 데이터 조회 python es에서 데이터를 10000개 이상 조회하려면 scroll id를 사용하거나 elasticsearch helpers의 scan 을 사용해야한다. helpers.scan elasticsearch.helpers.scan(conn, scroll='10m', index=index, doc_type='_doc', size=10000, query=query) es.scroll def scroll_API(index, body): result = [] _KEEP_ALIVE_LIMIT='30s' # Initialize the scroll page = es.search(index=index ,body=body ,scroll=_KEEP_ALIVE_LIMIT ,size=10000 ,track_total_hits=True ) ..
-
논문 [논문 요약] Utilization Prediction Aware VM Consolidation Approach for Green Cloud Computing AbstractVM consolidation은 엄격한 NP-hard 문제이고, 많은 휴리스틱 알고리즘이 제안됨기존의 문제 원인대부분의 솔루션은 현재 리소스 기반으로 호스트의 수를 최소화하는 것만을 담는다. 미래에 리소스에 대한 탐구 x문제 상황불필요한 마이그레이션과 SLA위반이 증가.논문의 해결책bin-packing으로 공식화된 알고리즘에 현재와 미래의 리소스 사용량을 고려한다.미래 리소스 예측엔 k-nearest neighbor regression 모델을 사용실험 결과VM과 호스트 리소스 예측의 효과를 실제 워크로드 추적을 사용해 조사한 결과energy consumption, VM migration 수, SLA 위반 수가 줄어드는 것을 알 수 있음 keywordDynamic VM consolidatio..
-
Data Engineering [Docker] Docker Compose로 Django 프로젝트 세팅 프로젝트 컴포넌트 정의 프로젝트를 시작하기위해 Dockerfile, python dependencies파일, docker-compoes.yml파일이 필요하다. Dockerfile 먼저, 디렉토리에 Dockerfile을 생성한다. # syntax=docker/dockerfile:1 FROM python:3 ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 WORKDIR /code # 작업 디렉토리를 code로 변경 COPY . . # 현재 디렉터리의 모든 파일 이미지를 작업 디렉터리로 복사 RUN pip install -r requirements.txt COPY . /code/ 이 도커 파일은 파이썬3 Parent 이미지를 시작한다. 부모 이미지는 src라는 새..
-
Data Engineering [PostgreSQL] macOS에 PostgreSQL 설치 및 설정 설치 설치전 brew에 postgresql을 검색해본다. brew search postgresql 기본 버전으로 설치를 시작한다. brew install postgresql 서비스 시작 brew services start postgresql postgres -V 설정 사용자 권한 계정 설정 먼저, postgre에 접속한다. psql postgres 아래의 명령어로 role 리스트를 확인 할 수 있다. postgre는 설치시 자동으로 계정을 생성해준다. postgres=# \du 권한을 설정해주기 전에, 기본으로 생성된 슈퍼유저의 비밀번호를 설정한다. postgres=# \password postgres 데이터 베이스 생성 테스트 데이터 베이스를 생성해봅니다. create database testdb; ..
-
Data Engineering [ELK] elastic stack 이란 / 개념 / 구성 요소 / 용도 ELK 란? ELK stack이란 Elasticsearch Logstash Kibana 세가지 오픈소스 프로젝트의 이니셜을 합쳐 만든 말이다. 등장 배경 루씬 기반 검색엔진인 elasticsearch는 단순 검색 엔진에 머무르는 대신 플랫폼으로 발전해 elk stack으로 발전했다. 기존의 검색엔진은 빅데이터 파이프라인을 구성하고, 유연성을 확보하기 위해서 오픈소스를 조합해야하는 불편함이 있었지만, elk stack은 일반적인 빅데이터 파이프라인을 구성하기 위한 데이터 수집, 가공, 저장 분석, 시각화에 필요한 모든 소프트웨어를 갖추고 있다. ELK 구성 요소 Beats, Logstash : 데이터를 수집하고 가공 Elasticsearch : 데이터 저장 및 분석 Kibana : 시각화 및 모니터링 El..
-
MLOps | Infra [kubernetes] 쿠버네티스 클러스터를 구성하는 도구 - Kubeadm, Kuberspray 쿠버네티스 클러스터를 구성하는 도구 Kubeadm 쿠버네티스에서 공식 제공하는 클러스터 생성 관리 도구 초기에는 고가용성을 갖춘 클러스터 구성이 어려워 테스트용으로 사용했지만 최근에는 점점 발전해 고가용성을 제공하는 클러스터 구성 가능 cf) 고가용성 High Availability: 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 지속적으로 정상 운영이 가능한 성질 Kubeadm에서 제공하는 클러스터 고가용성 구조 Kubespray 상용 서비스에 적합한 보안성과 고가용성이 있는 쿠버네티스 클러스터를 배포하는 오픈 소스 프로젝트 서버 환경 설정 자동화 도구인 앤서블 기반으로 개발 설정에 따라 다양한 형식의 클러스터 구성 가능 -> 온프레미스 환경에서 유용 Kuberspray에서 제공하는 ..
-
MLOps | Infra [kubernetes] 쿠버네티스 설치 - Kubespray 사용하기 Kubespray 사용 GCP를 사용하여 실습 환경을 구성하였다. VM인스턴스를 만든다. Compute Engine에 접속하여 VM인스턴스를 누른 후 [인스턴스 만들기]를 선택해 가상머신 인스턴스 5개를 만든다. 3개는 마스터로 사용하고, 2개는 워크노드로 사용하기 위함이다. 가용성을 위해 마스터노드를 보통 3개 정도 사용한다고한다. 1. SSH 키 생성과 배포 - 마스터 노드인 instance - 1 서버에서 다른 원격 접속(SSH)이 가능하도록 설정 인스턴스 목록에서 를 누르면 해당 서버에 SSH로 접속할 수 있다. RSA방식으로 암호화 키를 만들겠다는 옵션을 주면서 SSH키를 생성하는 명령어는 다음과 같다. ssh-keygen -t rsa ls -al .ssh/ .ssh 디렉터리 안에 id_rsa..
-
BaekJoon [백준 5557] 1학년 python 문제 풀이 이 문제는 DP로 풀어야한다. 어떤 구조로 정보가 저장될 수 있을지 살펴보면 왜 DP로 풀어야하는지 시각적으로 알 수 있다. 0부터 20사이의 숫자만 나와야하므로 DP는 크기가 21인 배열(0포함)을 사용할 수 있다. 21개의 배열에 루프를 돌며 다음 값을 + - 해서 다음 배열에 저장해주면 된다. 이때 상근이는 20을 넘는 수는 모른다는 조건이 있으므로 배열을 넘어가는 수는 저장하지 않는다. 이를 코드로 구현하면 아래와 같다. 통과된 풀이 import sys n = int(input()) arr = list(map(int, sys.stdin.readline().split())) dp = [[0] * 21 for _ in range(n)] # 첫 번째 수는 무조건 저장해야하니까 dp[0][ar..
-
Programmers [Programmers] 가장 큰 수 python (정렬) 문제 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 입출력 예 접근 방법 빈 문자열로 수를 초기화 ..
-
Programmers [Programmers] 체육복 python (Greedy) 문제 문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution ..
-
Programmers [Programmers] 완주하지 못한 선수 python (Hash) 문제 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한 사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 입출력 예 설명 예제 #1 "leo"는 참여자 명단에는 있지만, 완주..
-
이론 정리 [Algorithm] 가장 간단한 알고리즘 - 브루트 포스법 브루트 포스법 : brutu는 무식한, force는 힘이라는 뜻이다. 무식하게 힘으로 해결하는 방법. 즉, 가장 간단한 알고리즘으로 가능한 모든 경우의 수를 검사하는 알고리즘이다. 브루트 포스법은 문자열 검색 중 가장 가장 기초적이고 단순한 알고리즘이다. 문자열 검색 string searching 이란 ? : 어떤 문자열 안에 다른 문자열이 포함되어 있는지 검사하고, 만약 포함되어 있다면 어디에 위치하는지 찾아내는 것. 텍스트 text : 검색되는 쪽의 문자열 패턴 pattern : 찾아내는 문자열 ex. 문자열 'yena'에서 'na'를 검색하면 성공, 'bibi'에서 'na'를 검색하면 실패. 여기서 텍스트는 'yena', 'jiyun'이 되고, 패턴은 'na'가 된다. 브루트 포스법 brute fo..
-
Python [python] 문자열 관련 함수 정리 파이썬에서 문자열을 다룰 때 사용할 수 있는 함수들을 정리해보려고 한다. 멤버십 연산자 먼저, 가장 기본이되는 멤버십 연산자 membership operator를 사용해 문자열을 검색 할 수 있다. 'na' in 'yena' # yena에 na가 포함 o 인지 ? 'na' not in 'yena' # yena에 na가 포함 x 인지? pattern이 text에 포함되어있는지 boolean 값으로 반환한다. find, index 계열 함수 str클래스에 소속된 find(), rfind(), index(), rindex()를 이용하여 문자열을 검색할 수 있다. find() text = 'yenana' pattern = 'na' start = 0 # 시작 인덱스 end = len(text) # 시퀀스의 길이 ..
-
Python [Python] sys.setrecursionlimit() - 재귀 최대 깊이 설정 재귀 - sys.setrecursionlimit import sys sys.setrecursionlimit(10 ** 6) 재귀를 사용해서 문제를 풀 때 위 코드를 상단에 필수로 써주어야한다 !! 파이썬의 기본 재귀 깊이 제한은 1000회 이기 때문에 재귀 문제를 풀 때 런타임 에러가 발생할 수 있다. 특히, 코딩테스트 환경에서는 이런 에러 메시지를 볼 수 없으므로 코드의 상단에 sys.setrecursionlimit(10**6)을 작성해주면 재귀의 최대 깊이가 10**6으로 설정된다. 주의 : PyPy에서는 sys.setrecursionlimit()로 재귀의 깊이를 설정할 수 없다고 한다.
-
BaekJoon [백준 12904] A와 B python 문제 문자열 S, T가 주어질 때 2가지 규칙에 의해 S를 T로 변경할 수 있는지 출력하는 문제이다. 풀이 기본 아이디어 S의 길이 마지막 문자열이 A라면 A를 제거한다. 문자열을 뒤집고 뒤에 B를 추가한다. -> 마지막 문자열이 B라면 B를 제거하고, 문자열을 뒤집는다. 파이썬 구현 문자열을 뒤집고, 마지막 문자열을 제거하는 동작을 해야하므로 리스트 이용 통과된 풀이 s = list(input()) # 문자열 S t = list(input()) # 문자열 t success = False while len(s) != len(t): if t[-1] == 'A': # 규칙 1 t.pop() elif t[-1] == 'B': # 규칙 2 t.pop() t = t[::-1] if s == t: # 성공 여부 체..
-
이론 정리 [Algorithm] 재귀 Recursion 재귀 recursion 재귀 알고리즘의 기본 재귀란 ? 어떠한 이벤트에서 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의되는 경우 재귀를 사용하면 프로그램을 간결하고 효율성 좋게 작성할 수 있음 재귀 호출 recursive call '자기 자신과 똑같은 함수'를 호출한다. ex - 팩토리얼 구하기 factorial() 함수는 n - 1의 팩토리얼 값을 구하기 위해 다시 자기 자신과 똑같은 factorial() 함수를 호출한다. def factorial(n: int) -> int: """양의 정수 n의 팩토리얼을 구하는 과정""" if n > 0: return n * factorial(n - 1) else: return 1 if __name__ == '__main__': n = int(input('출..