Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions INSEA-99/week04/1072_게임.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# pypy3
# 시간(ms) : 88
# 공간(KB) : 108384

import sys
input = sys.stdin.readline
MAX = 1000000000

def bs(left, right, x, y, z) :
mid = (left + right) // 2 # 추가 게임 횟수
while (left <= right) :
if ((y + mid) * 100 // (x + mid) <= z) : left = mid + 1 # 초기승률이 추가게임승률보다 크거나 같은 경우 업데이트
else : right = mid - 1 # 초기승률이 추가게임승률보다 작은 경우 업데이트
mid = (left + right) // 2
return mid + 1

x, y = map(int, input().strip().split()) # 입력 받기
z = y * 100 // x
print(-1 if z >= 99 else bs(0, MAX, x, y, z))
14 changes: 14 additions & 0 deletions INSEA-99/week04/1302_베스트셀러.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# 시간(ms) : 104
# 공간(KB) : 110064
#
# 공유 :
# - counter는 내부적으로 dictionary로 구현됨
# - counter['a']는 dict에서 'a'의 개수를 반환

import sys
from collections import Counter
input = sys.stdin.readline

books = [input().strip() for _ in range(int(input().strip()))]
counter = Counter(books)
print(sorted(counter, key=lambda x : (-counter[x], x), reverse=True)[-1])
36 changes: 36 additions & 0 deletions INSEA-99/week04/1431_시리얼_번호.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# pypy3
# 시간(ms) : 92
# 공간(KB) : 109544
#
# Python3
# 시간(ms) : 40
# 공간(KB) : 32412
#
# 공유 :
# 빠른 입출력 + 내장 함수 (정렬, math 등)
# → Python3 추천

# 루프 많고 연산-heavy (단순 반복, 시뮬레이션)
# → PyPy3 추천

import sys
input = sys.stdin.readline


def sort_serial_nums(serial_num) :
"""_summary_

Args:
serial_num(string) : 정렬 대상 원소

Returns:
정렬 기준 반환
1. (오름) 길이
2. (오름) 원소 내 숫자 합
3. (오름) 사전순
"""
sum_digits = sum(int(ch) for ch in serial_num if ch.isdigit())
return (len(serial_num), sum_digits, serial_num)

serial_nums = [input().strip() for _ in range(int(input().strip()))]
print(*sorted(serial_nums, key=sort_serial_nums), sep='\n')
30 changes: 30 additions & 0 deletions INSEA-99/week04/2805_나무_자르기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# pypy3
# 시간(ms) : 460
# 공간(KB) : 258500

import sys
input = sys.stdin.readline

def count(h): # h미터로 자르고 남은 나무 길이 합 구하기
n = 0
for tree in trees:
if tree-h > 0:
n+= tree-h
return n

def bs(N):
left = 0
right = trees[-1]
mid = right // 2

while left <= right:
m = count(mid)
if m < N: right = mid-1 # 가져가야하는 길이보다 적은 경우
elif m >= N: left = mid+1 # 가져가야하는 길이보다 많거나 같은 경우 (최대 H를 구해야하므로 중지하지 않고 진행)
mid = (left+right)//2
return mid


k, N = map(int, input().strip().split())
trees = sorted(list(map(int, input().strip().split())))
print(bs(N))