no image
[파이썬] 프로그래머스 H-Index
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 각 h마다 추가되는 인용문 개수를 이분 탐색으로 찾아서 더했다. from bisect import bisect_left, bisect_right def solution(citations): citations.sort() # h ~ 0까지 가능 cum_sum = dict(zip(range(len(citations)), [0] * len(citations))) # h보다 더 많이 인용된 논문 개수 temp_sum = sum([1 for i in citations if i > len(citations)]..
2022.10.02
no image
[파이썬] 프로그래머스 성격 유형 검사하기
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 우선 순위가 동일할 경우를 대비해 미리 알파벳 순으로 answer에 입력했다. def solution(survey, choices): # 미리 알파벳 순으로 정렬 answer = ["R", "C", "J", "A"] score = {"R":0, "T":0, "C":0, "F":0, "J":0, "M":0, "A":0, "N": 0} for s, c in zip(survey, choices): if c 4: score[s[1]] += ..
2022.10.01
no image
[파이썬] 프로그래머스 신고 결과 받기
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 유저가 신고한 사용자 정보를 저장하는 대신, 유저를 신고한 사용자 정보를 저장했다. def solution(id_list, report, k): # 사용자를 신고한 유저 user_report = {} report = list(set(report)) # 신고 처리 for i in report: a, b = i.split(" ") # 신고 처리 if b not in user_report: user_report[b] = set() user_report[b].add(a) # 메일 개수 mail_cnt = ..
2022.10.01
no image
[파이썬] 프로그래머스 신규 아이디 추천
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 조건이 까다로워서 정규 표현식으로 풀었다. [ic]+[/ic], [ic]^[/ic], [ic]$[/ic] 등 패턴을 익히느라 풀이까지는 시간이 조금 걸렸다. import re def solution(new_id): # 대문자 -> 소문자 new_id = new_id.lower() # 허용되는 문자만 받아오기 new_id = re.sub(r"[^0-9a-z-_.]", "", new_id) # .는 그대로 쓰면 문자 전체가 됨 new_id = re.sub(r"[.]+", ".", new_id) new_..
2022.09.27
no image
[파이썬] 프로그래머스 키패드 누르기
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 *과 #을 10, 12라고 생각하면 키패드 영역을 3의 몫,나머지 좌표로 표현할 수 있다. 나머지가 0인 경우 왼손, 2인 경우 오른손으로 처리하면 된다. def solution(numbers, hand): # 현재 손가락 위치 pos_left = 9 pos_right = 11 # ?손잡이 처리 hand = hand[0].upper() answer = "" for i in numbers: i -= 1 if i == -1 : i = 10 # 이동해야할 좌표 x, y = divmod(i, 3) if y..
2022.09.27
no image
[파이썬] 프로그래머스 크레인 인형 뽑기
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 열 단위 입력을 처리하기 위해서 dict를 만들었는데 그냥 board 변수 그대로 for문 돌려도 됐을 거 같다. 사라진 인형의 개수를 세기 위해서 [ic]stack[/ic]을 사용했다. from collections import deque def solution(board, moves): # 남은 열 개수 len_list = dict(zip(range(1, len(board) + 1), [0] * len(board))) # 남은 열 저장 for idx, col in enumerate(zip(*bo..
2022.09.16
no image
[파이썬] 정규 표현식 활용하기
기본 패턴 re.search() : 주어진 패턴과 일치해야 함 re.match() : 주어진 패턴과 처음부터 일치해야 함 고급 패턴 () : 문자열을 그룹으로 묶어서 관리(캡쳐)할 수 있도록 도와준다. \1 ~ 9 : 캡쳐된 그룹의 인덱스를 명시해서 참고할 수 있다. # () : 그룹 지정, \1 : 캡쳐된 그룹 참조 re_pt1 = r"(aya|ye|woo|ma)\1+" 찾고자 하는 패턴이 반복되는 경우, Group 또는 findall을 활용할 수 있다. Group 활용한 경우 예시 # 우선 Group으로 match 시작 >>> m = re.match('([0-9]+) ([0-9]+)', '10 295') >>> m.group(1) # 첫 번째 그룹(그룹 1)에 매칭된 문자열을 반환 '10' >>> m..
2022.09.14
[파이썬] 코딩 테스트 오류 유형
오류 겪을 때마다 추가합니다. 런타임 에러 0으로 나누었을 때(분모가 0인 경우) 존재하지 않는 인덱스에 접근할 때 선언하지 않은 변수를 사용할 때 재귀 호출이 너무 깊어질 경우 : 참고 타입 에러 문자열을 인덱싱하여 값을 수정할 때 deque를 slicing 할 때
2022.08.24
no image
[파이썬] 프로그래머스 비밀지도
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 1/0으로 벽과 공백을 처리해야한다. 비트 연산자를 활용해서 한 쪽만 벽이 있더라도 벽으로 처리했다. def solution(n, arr1, arr2): arr1 = [list(f"{bin(i)[2:]:0>{n}}") for i in arr1] arr2 = [list(f"{bin(i)[2:]:0>{n}}") for i in arr2] decode = [[0] * n for _ in range(n)] for row in range(n): for col in range(n): # 어느 한쪽에 벽이 존재..
2022.08.19
no image
[파이썬] 프로그래머스 레벨1 모음
정수 내림차순으로 배치하기 sorted 실행 후 생성된 문자열 리스트를 join 함수를 통해서 문자열로 변경했다. def solution(n): n_str = "".join(sorted(str(n), reverse = True)) return int(n_str) 행렬의 덧셈 zip 함수를 차례로 사용해 행렬의 덧셈을 구현했다. def solution(arr1, arr2): # 전개 순서 : [[1, 2], [2, 3]] // [[3,4], [5,6]] => [1,2], [3,4] => [4, 6] result = [[c + d for c, d in zip(a, b)] for a, b in zip(arr1, arr2)] return result 자연수 뒤집어 배열로 만들기 숫자 각 성분을 list에 넣기 ..
2022.08.17
no image
[SQL] 프로그래머스 문제 모음
GROUPBY 고양이와 개는 몇마리 있을까 select animal_type, count(*) as "count" from animal_ins group by animal_type order by animal_type; 동명 동물 수 찾기 select name, count(*) as "count" from animal_ins group by name having name is not null and count(*) >=2 order by name; 입양 시각 구하기 1 select hour(datetime) as "hour", count(*) as "count" from animal_outs group by hour(datetime) having hour >= 9 and hour < 20 order by..
2022.08.06
no image
[파이썬] 백준 1463번 1로 만들기
1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 시간 제한 0.15초 메모리 제한 128MB 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 예제 입력 1 2 예제 출력 1 1 예제 입력 2 10 예제 출력 2 3 힌트 10의 경우에 10..
2022.07.12