[Python] index 찾기 문자열에서 인덱스 찾기 문자열의 위치 값을 앞에서부터 몇번째 위치에 있는지 알아내는 방법엔 find와 index가 있다. 문자열.find(찾을 문자열, start_index) 문자열.index(찾을 문자열) let = 'abcde' >>> let.find('a') 0 >>> let.index('b') 1 두 함수의 차이점은 find는 찾는 값이 없을 경우 -1을 반환하고 index는 오류를 반환한다. >>> let.find('f') -1 >>> let.index('f') ValueError: substring not found rfind, rindex 뒤에서 부터 찾고싶을때는 rfind, rindex를 사용하면 된다. let = 'abcdea' >>> let.rfind('..
[Python] 인덱싱, 슬라이싱 문자열과 리스트의 인덱싱과 슬라이싱 방법이 헷갈려서 정리, 계속 추가 예정 뒤에서 부터 자르기 let = 'abcdefg' >>> let = let[:-2] 'abcde' 문자열 역순 출력 let = 'abcdefg' >>> let[::-1] 'gfedcba' >>> let[1:3][::-1] 'dcb' 리스트 개수로 자르기 arr = [1,2,3,4,5,6] n = 2 >>> [arr[i:i+n] for i in range(0, len(arr), n)] [[1,2],[3,4],[5,6]] 이중 리스트 인덱스 접근하기 arr = [[10,20], [30,40], [50,60]] for i in range(len(arr)): for j in range(len(arr[i])..
[Python] Zip() 파이썬의 내장함수인 zip()은 여러 개의 iterable 객체를 인자로 받고, 각 객체가 담고있는 원소를 튜플 형태로 차례로 접근할 수있는 iterator를 반환한다. zip() 아래와 같이 num 리스트와 let 리스트를 zip() 함수에 인자로 넘겨서 호출이 가능하다. num = [1, 2, 3] let = ['a','b','c'] for zipper in zip(num, let) print(zipper) (1, 'a') (2, 'b') (3, 'c') ** zip() 함수로 넘기는 인자의 길이가 다를 땐 짧은 인자를 기준으로 데이터가 엮이고 나머지는 버려지기 때문에 주의해야한다. unzip zip() 함수로 엮어놓은 데이터를 다시 해체하고 싶을 땐 unpacking 연산..
[프로그래머스][SQL][Lv03] 물고기 종류 별 대어 찾기 풀이 ID 컬럼은 group by가 불가능하기 때문에, where 절에서 서브쿼리를 사용해 종류별 가장 큰 물고기와 일치하는 종류와 길이를 검색한다. 정답 SELECT id, fish_name, length FROM fish_info JOIN fish_name_info USING (fish_type) WHERE (fish_type, length) IN ( SELECT fish_type, MAX(length) FROM fish_info GROUP BY fish_type) ORDER BY id;
[SQL] USING USING 두 개의 테이블이 내부 조인으로 조인 될 때 조인하고자 하는 두 테이블의 컬럼명이 같을 경우 조인 조건을 길게 적지 않고 간단하게 적을 수 있다. 일반적인 JOIN 조건이 다음과 같을 때, SELECT * FROM dept d JOIN employees e ON d.dept_num = e.dept_num; USING을 사용하면 다음과 같이 표현 할 수 있다. SELECT * FROM dept d JOIN employees e USING(dept_num); 추가로 ON을 사용하면 컬럼명이 다르더라도 JOIN 조건을 사용할 수 있다.
[MySQL] With 문SQL을 사용하여 대량의 데이터를 다루는 경우, 임의의 결과를 정의하고 사용하는 경우임시 테이블을 만들어 해당 테이블에 값을 저장할 수 있다. WITHwith절은 동일한 SQL이 반복되어서 사용될 때 성능을 높이기 위해 사용된다.실제로는 temp라는 임시테이블에 저장되는 가상의 테이블이다.with as ( )with절은 임시테이블을 사용하여 저장해놓은 데이터를 액세스하기 때문에, 메모리를 차지한다.여러 개의 with절을 동시에 돌리면 임시테이블에 부하가 발생해 다같이 느려진다. with절은 다음과 같은 두가지 방식이 이용된다. 1) materialize기본 with절 사용 시 적용되는 것으로 temp를 사용한다. 2) inlinetemp 테이블을 생성하지 않고 inli..
[프로그래머스][SQL][Lv02] 조건에 맞는 사원 정보 조회하기(서브쿼리) 풀이 FROM 절의 서브 쿼리를 사용하여 score 데이터가 있는 동적인 테이블을 생성한다. 먼저 사원 별로 2022년도의 평가 점수를 검색 한다. SELECT SUM(score) AS score, emp_no FROM hr_grade GROUP BY emp_no 위 쿼리를 FROM 절의 서브쿼리로 사용한 뒤, hr_employees 테이블과 임시 테이블의 emp_no가 같은 데이터만 검색할 수 있도록 조건을 걸어준다. 점수를 기준으로 내림차순으로 정렬 뒤 limit으로 1순위를 뽑아낼 수 있다. 정답 SELECT s.score, e.emp_no, emp_name, position, email FROM hr_employees ..
[MySQL] ROUND(), TRUNCATE() 숫자 데이터를 다룰 때, 소수점 자리를 처리해야하는 경우가 있다. MySQL에서 반올림과 버림 기능을 사용하기 위해 각각 ROUND()와 TRUNCATE() 함수를 사용할 수 있다. 반올림 ROUND ROUND() 함수를 사용하면 반올림을 사용할 수 있다. ROUND(소수, 나타내고 싶은 자리 수) 만약 소수점 3번째 자리에서 반올림을 하고싶다하면 다음과 같이 나타낼 수 있다. SELECT ROUND(123.4567, 2) -- 123.46 음수도 사용이 가능하다. SELECT ROUND(123.456, -1) -- 120 버림 TRUNCATE TRUNCATE() 함수를 이용하면 특정 자리 수 이하를 버릴 수 있다. TRUNCATE(숫자, 나타내고 싶은 ..
[AWS] ECR 로그인 & 빌드 및 푸쉬 ECR(Elastic Container Registry)은 AWS의 관리형 컨테이너 이미지 레지스트리 서비스다. 도커 허브와 비슷한 개념으로 보면 된다. ECR은 S3로 이미지를 관리하기 때문에 고가용성을 보장하고 IAM 인증을 통해 권한 관리가 가능하다. Docker CLI 및 AWS CLI를 통해 컨테이너 이미지를 ECR에 빌드 및 푸쉬가 가능하다. ECR에 이미지를 빌드 및 푸쉬하는 과정을 알아보자. 로그인 aws ecr get-login-password 프라이빗 ECR에 대한 권한이 있는 IAM 사용자로 위 명령어를 사용하면, 로그인이 된다. aws ecr get-login-password --region --profile mfa | docker logi..
[프로그래머스][SQL] 조건에 맞는 개발자 찾기 풀이프로그래밍 스킬 코드가 2진수로 이루어져있기 때문에비트 연산자를 사용하여 판별을 할 수 있다. & 연산자: A & B 일 때, A 비트의 값이 0이면 B 비트 값에 상관없이 0A 비트의 값이 1이면 B 비트의 값에 따라 0 또는 1A 와 B 의 비트 값이 모두 1일 때만 1 정답SELECT id, email, first_name, last_nameFROM developersWHERE skill_codes & (SELECT code FROM skillcodes WHERE name = 'Python')OR skill_codes & (SELECT code FROM skillcodes WHERE name = 'C#')ORDER BY id;
[etc] 옵시디언(obsidian) 무료로 퍼블리시 하기 옵시디언은 마크다운 형식 으로 작성 할 수 있는 노트 앱이다. 원래 노트 앱으로 노션을 사용하고 있었는데, 사내망에선 노션이 접근이 안됐다. 원노트는 너무 불편하고, 대체제를 찾다보니 옵시디언이라는 소프트웨어를 선택했다. 옵시디언은 노션과 달리 로컬 환경에 저장이되어 오프라인 환경에서도 접근이 가능했다. 마크다운 형식으로 작성하기 편하고 다양한 플러그인이 많아 좋았지만, 내가 생각한 옵시디언의 단점은 노션에 비해 다른 사람에게 공유하기가 어렵다는 점이였다. 옵시디언을 퍼블리시 하려면 유료 기능을 사용했어야 했는데 무료로 퍼블리싱하는 여러가지 방법들이 있었다. 그 중 나는 my digital garden이라는 플러그인으로 퍼블리싱을 해보기로 했다...
[Git] 로컬 브랜치를 다른 이름의 원격 브랜치로 push 일반적으로 로컬 브랜치를 같은 이름의 원격 브랜치에 push하지만, 운영중인 브랜치일땐 바로 push를 하기 쉽지가 않다. 그럴 경우 로컬 브랜치와 원격브랜치의 이름을 콜론으로 구분하여 지정하면 다른 이름의 원격 브랜치로 push가 된다. 예를 들어 로컬 브랜치의 이름이 master고, 원격 브랜치의 이름이 new-branch라고 하면 git push origin master:new-branch 다음과 같이 push 하면 된다. 만약 원격 브랜치에 new-branch라는 브랜치가 없는 경우, 자동으로 생성된다.