diff --git "a/Junho Park/20230810/\352\267\244 \352\263\240\353\245\264\352\270\260.py" "b/Junho Park/20230810/\352\267\244 \352\263\240\353\245\264\352\270\260.py" new file mode 100644 index 0000000..87c2a88 --- /dev/null +++ "b/Junho Park/20230810/\352\267\244 \352\263\240\353\245\264\352\270\260.py" @@ -0,0 +1,59 @@ +# This is my solution for Programmers 138476 +# 귤 고르기 +# https://school.programmers.co.kr/learn/courses/30/lessons/138476 + +# initial approach --> timeout + +# from itertools import combinations +# def calcDiff(tangerine): +# idx = {} +# for t in tangerine: +# idx[t] = 1 +# return len(idx) + +# def solution(k, tangerine): +# minDiff = k + +# for set in combinations(tangerine, k): +# diff = calcDiff(set) +# if diff < minDiff: +# minDiff = diff + +# return minDiff + +# second approach --> timeout + +# from itertools import combinations + +# def solution(k, tangerine): +# minDiff = k + +# for comb in combinations(tangerine, k): +# diff = len(set(comb)) +# if diff < minDiff: +# minDiff = diff + +# return minDiff + +def solution(k, tangerine): + answer = 0 + check = 0 + tangerine.sort() + dup = {} + for i in tangerine: + if i in dup: + dup[i] += 1 + else: + dup[i] = 1 + + arr = sorted(dup.items(), key=lambda x: x[1], reverse=True) + if arr[0][1] >= k: + return 1 + else: + for i in arr: + if check < k: + check += i[1] + answer += 1 + else: + break + return answer \ No newline at end of file diff --git "a/Junho Park/20230810/\353\222\267 \355\201\260\354\210\230.py" "b/Junho Park/20230810/\353\222\267 \355\201\260\354\210\230.py" new file mode 100644 index 0000000..bb4ec2d --- /dev/null +++ "b/Junho Park/20230810/\353\222\267 \355\201\260\354\210\230.py" @@ -0,0 +1,28 @@ +# This is my solution for Programmers 154539 +# 뒤에 있는 큰 수 찾기 +# https://school.programmers.co.kr/learn/courses/30/lessons/154539 + +# def solution(numbers): +# answer = [] +# length = len(numbers) +# for i in range(length): +# backNum = -1 +# for j in range(i+1, length): +# if numbers[i] < numbers[j]: +# backNum = numbers[j] +# break +# answer.append(backNum) +# return answer + +def solution(numbers): + stack = [] + answer = [0] * len(numbers) + + for i in range(len(numbers)): + while stack and numbers[stack[-1]] < numbers[i]: + answer[stack.pop()] = numbers[i] + stack.append(i) + while stack: + answer[stack.pop()] = -1 + + return answer \ No newline at end of file diff --git "a/Junho Park/20230810/\354\226\221\352\266\201.py" "b/Junho Park/20230810/\354\226\221\352\266\201.py" new file mode 100644 index 0000000..740f1bd --- /dev/null +++ "b/Junho Park/20230810/\354\226\221\352\266\201.py" @@ -0,0 +1,45 @@ +# This is my solution for Programmers 92342 +# 양궁대회 +# https://school.programmers.co.kr/learn/courses/30/lessons/92342 + +from itertools import combinations_with_replacement +from collections import defaultdict + + +def compare(ryan, apeach, win_dict): # 승패 판단 + ryan_score = 0 + apeach_score = 0 + + for i in range(11): # 점수 계산 + if apeach[i] >= ryan[i]: + if apeach[i] == 0: + continue + apeach_score += 10 - i + else: + ryan_score += 10 - i + + if ryan_score > apeach_score: # 라이언이 이겼으면 win_dict에 {점수 차 : [라이언 결과들]} 형태로 같은 점수 차를 갖는 라이언 결과들을 모음 + win_dict[ryan_score - apeach_score].append(ryan) + return win_dict + + +def solution(n, info): + cases = list(combinations_with_replacement([i for i in range(11)], n)) + cands = [] + win_dict = defaultdict(list) + + for case in cases: # 중복조합을 이용하여 라이언을 쏠 수 있는 모든 경우의 수를 구함 + ryan = [0] * 11 + for i in case: + ryan[i] += 1 + cands.append(ryan) + + for cand in cands: + win_dict = compare(cand, info, win_dict) # 이긴 것만 win_dict에 기록 + + if not win_dict: # 한번도 이길 수 없다면 + return [-1] + + target = win_dict[max(win_dict.keys())] # 점수 차가 가장 큰 라이언 결과들 + target.sort(key=lambda x: tuple([-x[i] for i in range(10, -1, -1)])) # 문제의 조건에 따라 정렬 + return target[0] \ No newline at end of file