코테 16

[프로그래머스 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] 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

[프로그래머스 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

[프로그래머스 Lv2] 예상 대진표 (Python)

def solution(n, a, b): round = 1 while (True) : if a % 2 == 1 : a += 1 if b % 2 == 1 : b += 1 if a == b : break a //= 2 b //= 2 round += 1 return round 그냥 노트에 낙서하면서 아무 생각없이 코드 친 건데 얼떨결에 통과돼서 ????/!/?????!!!?? 함 일단 A 랑 B 랑 어느 라운드에서 만나는지만 알면 되고, A, B 이외에는 누가 이기던지 상관없기 때문에 무조건 짝수 번호가 올라온다고 가정하고 풀었다 그래서 A 랑 B 도 동일하게 홀수 번호이면 +1 해서 짝수 번호로 만들어줬고, 만약 A, B 둘 중에 누구 하나 +1 했는데 같은 번호가 된다는 건 결국 해당 라운드에서 경기하게 ..

알고리즘 2022.07.27

[프로그래머스 Lv1] 예산 (Python)

def solution(d, budget): answer = 0 d.sort() cnt = 1 now = d[0] for i in d[1:] : if now + i > budget : break else : cnt += 1 now += i return cnt 실행했더니 테스트 케이스 하나가 실패라고 떴다 ,, 임의로 테케 몇 개 집어넣어서 돌려보다가 드디어 발견함 생각해보니까 초기값을 1로 주면 안 됐음 ㅎㅎ budget 이 제일 작은 금액보다 더 작을 수도 있기 때문에 ,, def solution(d, budget): answer = 0 d.sort() cnt = 0 now = 0 for i in d : if now + i > budget : break else : cnt += 1 now += i re..

알고리즘 2022.07.02