코딩테스트 14

[프로그래머스 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] 주차 요금 계산 (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(nums): answer = 0 li = set() for i in range(len(nums)-2) : for j in range(i+1, len(nums)-1) : for k in range(j+1, len(nums)) : li.add(nums[i] + nums[j] + nums[k]) li = list(li) li.sort(reverse=True) for idx in li : cnt = 0 for i in range(idx-1, 1, -1) : if idx % i == 0 : cnt += 1 break if cnt == 0 : answer += 1 return answer ?? 분명 테케는 다 맞았잔ㅎ아.... 왜 배신해 라며 한참 헤매다가 드디어 틀렸던 이유를 알아냄 "nu..

알고리즘 2022.07.06

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

[프로그래머스 Lv2] 카펫 (Python)

def solution(brown, yellow): total = brown + yellow num = [] idx = 3 while (True) : if total % idx == 0 : if idx > total // idx : break num.append([total // idx, idx]) idx += 1 for n in num : temp = (n[0]-2)*2 + n[1]*2 if temp == brown : return [n[0], n[1]] break 그냥 로직만 잘 짜면 금방 해결할 수 있는 문제였다 일단 (brown + yellow) 의 약수를 구해주는데, 1과 2는 가로/세로 길이가 될 수 없기 때문에 애초에 idx 를 3으로 초기화시켜줌. 그리고 가로 길이가 세로 길이보다 더 커야..

알고리즘 2022.07.02