Skip to content

Commit cac31d3

Browse files
authored
Merge pull request #14 from team-mate-algorithm/INSEA-99/week04
Insea 99/week04
2 parents 9599151 + 478e171 commit cac31d3

File tree

4 files changed

+99
-0
lines changed

4 files changed

+99
-0
lines changed

INSEA-99/week04/1072_게임.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# pypy3
2+
# 시간(ms) : 88
3+
# 공간(KB) : 108384
4+
5+
import sys
6+
input = sys.stdin.readline
7+
MAX = 1000000000
8+
9+
def bs(left, right, x, y, z) :
10+
mid = (left + right) // 2 # 추가 게임 횟수
11+
while (left <= right) :
12+
if ((y + mid) * 100 // (x + mid) <= z) : left = mid + 1 # 초기승률이 추가게임승률보다 크거나 같은 경우 업데이트
13+
else : right = mid - 1 # 초기승률이 추가게임승률보다 작은 경우 업데이트
14+
mid = (left + right) // 2
15+
return mid + 1
16+
17+
x, y = map(int, input().strip().split()) # 입력 받기
18+
z = y * 100 // x
19+
print(-1 if z >= 99 else bs(0, MAX, x, y, z))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# 시간(ms) : 104
2+
# 공간(KB) : 110064
3+
#
4+
# 공유 :
5+
# - counter는 내부적으로 dictionary로 구현됨
6+
# - counter['a']는 dict에서 'a'의 개수를 반환
7+
8+
import sys
9+
from collections import Counter
10+
input = sys.stdin.readline
11+
12+
books = [input().strip() for _ in range(int(input().strip()))]
13+
counter = Counter(books)
14+
print(sorted(counter, key=lambda x : (-counter[x], x), reverse=True)[-1])
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# pypy3
2+
# 시간(ms) : 92
3+
# 공간(KB) : 109544
4+
#
5+
# Python3
6+
# 시간(ms) : 40
7+
# 공간(KB) : 32412
8+
#
9+
# 공유 :
10+
# 빠른 입출력 + 내장 함수 (정렬, math 등)
11+
# → Python3 추천
12+
13+
# 루프 많고 연산-heavy (단순 반복, 시뮬레이션)
14+
# → PyPy3 추천
15+
16+
import sys
17+
input = sys.stdin.readline
18+
19+
20+
def sort_serial_nums(serial_num) :
21+
"""_summary_
22+
23+
Args:
24+
serial_num(string) : 정렬 대상 원소
25+
26+
Returns:
27+
정렬 기준 반환
28+
1. (오름) 길이
29+
2. (오름) 원소 내 숫자 합
30+
3. (오름) 사전순
31+
"""
32+
sum_digits = sum(int(ch) for ch in serial_num if ch.isdigit())
33+
return (len(serial_num), sum_digits, serial_num)
34+
35+
serial_nums = [input().strip() for _ in range(int(input().strip()))]
36+
print(*sorted(serial_nums, key=sort_serial_nums), sep='\n')
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# pypy3
2+
# 시간(ms) : 460
3+
# 공간(KB) : 258500
4+
5+
import sys
6+
input = sys.stdin.readline
7+
8+
def count(h): # h미터로 자르고 남은 나무 길이 합 구하기
9+
n = 0
10+
for tree in trees:
11+
if tree-h > 0:
12+
n+= tree-h
13+
return n
14+
15+
def bs(N):
16+
left = 0
17+
right = trees[-1]
18+
mid = right // 2
19+
20+
while left <= right:
21+
m = count(mid)
22+
if m < N: right = mid-1 # 가져가야하는 길이보다 적은 경우
23+
elif m >= N: left = mid+1 # 가져가야하는 길이보다 많거나 같은 경우 (최대 H를 구해야하므로 중지하지 않고 진행)
24+
mid = (left+right)//2
25+
return mid
26+
27+
28+
k, N = map(int, input().strip().split())
29+
trees = sorted(list(map(int, input().strip().split())))
30+
print(bs(N))

0 commit comments

Comments
 (0)