본문 바로가기
컴퓨터/백준 문제풀이

17389 보너스 점수, 16165 걸그룹 마스터 준석이, 17224 APC는 왜 서브태스크 대회가 되었을까?

by 하링아 2020. 10. 21.
반응형

17389 보너스 점수, 16165 걸그룹 마스터 준석이, 17224 APC는 왜 서브태스크 대회가 되었을까?

 

17389 보너스 점수

# 첫번째 풀이(consol, VSC에서 되는데 백죽에서 런타임 에러.. 이유 모르겠음)
N, S = int(input()), input()
score, bouns  = 0, 0

for i in range(N):
	if S[i] == 'O':
		score, bonus = score + i + bonus + 1, bonus + 1
	else:
		bonus = 0
		
print(score)

# 두번째 풀이
N, S = input(), input()

score, bonus = 0, 0

for idx, OX in enumerate(S):
	if OX == 'O':
		score, bonus = score + idx + 1 + bonus, bonus + 1
	else:
		bonus = 0

print(score)

- enumerate 이용해서 인덱스 뽑을 수 있음

 

 

16165 걸그룹 마스터 준석이

# 첫번째 풀이
N, M = map(int, input().split())
ggroup = {}

for _ in range(N):
	groupname, member = input(), int(input())
	for _ in range(member):
		if not groupname in ggroup.keys():
			ggroup[groupname] = [input()] 
		else:
			ggroup[groupname].append(input())

for _ in range(M):
	name, kind = input(), int(input())
	if kind == 0:
		ggroup[name].sort()
		for item in ggroup[name]:
			print(item)
	else:
		for team in ggroup.keys():
			if name in ggroup[team]:
				print(team)
				break
                
# 두번째 풀이
N, M = map(int, input().split())

team_mem, mem_team = {}, {}

for i in range(N):
	team_name, mem_num = input(), int(input())
	team_mem[team_name] = []
	for j in range(mem_num):
		name = input()
		team_mem[team_name].append(name)
		mem_team[name] = team_name
		
for i in range(M):
	name, q = input(), int(input())
	if q:
		print(mem_team[name])
	else:
		for mem in sorted(team_mem[name]):
			print(mem)

- 딕셔너리 구조에서 value를 통해서 key값을 구하는 방법으로 처음부터 value값에 대한 key값을 할당해주는 딕셔너리를 만들수 있음

- for 문에서 iterable 객체로 sorted()를 바로 사용할 수 있음

 

 

17224 APC는 왜 서브태스크 대회가 되었을까?

# 첫번째 풀이(100점)
N, L, K = map(int, input().split())
array = [] # level of problem
check = [False] * N # check solved problem
count = 0 # maximum number of problems she can solve
score = 0
for _ in range(N):
	array.append(list(map(int, input().split())))
	
for i in range(N):
	if count > K:
    	break
	if array[i][1] <= L and array[i][0] > L:
		score += 140
		count += 1
		check[i] = True
		
for i in range(N):
	if count > K:
		break
	if array[i][1] <= L and not check[i]:
		score += 140
		count += 1
		check[i] = True
		
for i in range(N):
	if count > K:
		break
	if array[i][0] <= L and not check[i]:
		score += 100
		count += 1

print(score)
			
# 두번째 풀이(140점)
N, L, K = map(int, input().split())

easy, hard = 0, 0

for i in range(N):
	sub1, sub2 = map(int, input().split())
	if sub2 <= L:
		hard += 1
	elif sub1 <= L:
		easy += 1
		
ans = min(hard, K) * 140 # compare number of hard problem and number of problem she can solve

if hard < K: # if time left, solve easy problems
	ans += min(K-hard, easy) * 100
	
print(ans)
			

 

반응형

댓글