전체 글 26

[프로그래머스 Lv2 - 2020 KAKAO BLIND RECRUITMENT] 문자열 압축 (Python)

from collections import defaultdict def solution(s): answer = len(s) for i in range(1, len(s) // 2 + 1) : # i : 자를 문자열 개수 li = defaultdict(int) # li : 해당 문자의 연속된 개수 저장하는 딕셔너리 result = "" # result : 압축된 문자열 start = i # start : 현재 문자의 시작 인덱스 stack = [] # stack : 들어오는 문자 저장하는 리스트 (스택) stack.append(s[:start]) # 처음 들어온 문자는 이미 스택에 저장하고 시작 li[s[:start]] += 1 # li 딕셔너리에 해당 문자 개수 +1 while(True) : # 압축하는 ..

알고리즘 2022.09.29

[프로그래머스 Lv2 - 2021 KAKAO BLIND RECRUITMENT] 메뉴 리뉴얼 (Python)

from collections import defaultdict from itertools import combinations # 리스트 평탄화하는 함수 def Flatten(li): result = [] for item in li : if type(item) == tuple : result += Flatten(item) else : result += [item] return result def solution(orders, course): answer = [] combi = defaultdict(list) lists = defaultdict(int) for order in orders: order = sorted(order) # 알파벳 미리 정렬 for num in course : for i in co..

알고리즘 2022.09.25

[프로그래머스 Lv2 - 2022 KAKAO BLIND RECRUITMENT] 양궁 대회 (Python)

from itertools import combinations_with_replacement from collections import Counter def solution(n, info): answer = [-1] max_gap = 0 for arrow in combinations_with_replacement(range(10, -1, -1), n): apeach, lion = 0, 0 cnt = Counter(arrow) info2 = [0 for _ in range(11)] for i in range(11) : info2[i] = cnt[10-i] if info[i] > info2[i] : apeach += (10-i) elif info[i] < info2[i]: lion += (10-i) elif..

알고리즘 2022.09.19

[프로그래머스 Lv2 - 2022 KAKAO BLIND RECRUITMENT] k진수에서 소수 개수 구하기 (Python)

def CheckPrime(n): if '0' in n or n == '1' : return False n = int(n) for i in range(2, n): if n % i == 0 : return False return True def solution(n, k): answer = 0 num = '' while (True) : num += str(n % k) n //= k if n == 0 : break num = num[::-1] if CheckPrime(num) : # num 자체가 소수일 때 (조건 4) return num else : # 조건 1 ~ 조건 3 start = 0 for i in range(len(num)) : if num[i] == '0' : if i != start and C..

알고리즘 2022.09.16

[프로그래머스 Lv2 - 2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산 (Python)

from collections import defaultdict import math def solution(fees, records): answer = [] numbers = [] # 출차 내역 유무 확인 enter = defaultdict(int) # {차량번호 : 입차 시간} charge = defaultdict(int) # {차량번호 : 누적된 이용 시간} for i in range(len(records)) : time, num, io = records[i].split(" ") hour, minute = time.split(":") total = int(hour)*60 + int(minute) if io == 'IN' : enter[num] = total numbers.append(num) els..

알고리즘 2022.09.16

[프로그래머스 Lv1 - 2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기 (Python)

누가 봐도 mbti 에서 영감받은 문제였던 것임 ,, from collections import defaultdict alpha = [['R', 'T'], ['C', 'F'], ['J', 'M'], ['A', 'N']] li = defaultdict(int) def solution(survey, choices): answer = '' for i in range(len(survey)) : if choices[i] 4 : li[survey[i][1]] += 1 for al in alpha : answer += comp(al[0], al[1]) return answer def comp(f, s): if li[f] > li[s] ..

알고리즘 2022.09.07

[프로그래머스 Lv3] - 숫자 게임 (Python)

def solution(A, B): answer = 0 A.sort() B.sort() for a in A : for b in B : if a < b : answer += 1 B.remove(b) break if B.index(b) == (len(B) -1) : minV = min(B) B.remove(minV) return answer 나는 A, B 모두 오름차순해서 작은 숫자부터 비교할거라서 이중 for 문 돌렸다 1) B 배열을 순회하면서 A 보다 커지는 B 가 나온다면 그대로 배치하고 break 2) 만약 끝까지 돌았는데도 A 보다 큰 수가 없다면 남아있는 B 원소 중 가장 작은 수 배치 - 어차피 A 보다 큰 수가 없다면 버리는 숫자로 젤 작은 숫자를 배치한다는 의미..!!! 정확성은 다 통과했..

알고리즘 2022.08.06