2 분 소요

사용 언어: Python3

문제

백준 17224

스크린샷 2023-03-28 오후 2 08 13 스크린샷 2023-03-28 오후 2 08 31 스크린샷 2023-03-28 오후 2 08 44

코드

내 풀이

# 문제의 개수 N
# 현정이의 역량 L (난이도)
# 현정이가 대회중에 풀 수 있는 문제의 최대 개수 K
N, L, K = map(int, input().split())

question_dic = {} # 각 문제 번호당 sub1, sub2
for i in range(N):
  sub1, sub2 = map(int, input().split())
  question_dic[i+1] = (sub1, sub2)

# 쉬운 버전의 난이도(sub1) 순으로 정렬
sorted_dic = dict(sorted(question_dic.items(), key=lambda x: x[1][0])) # 오름차순 정렬
# sorted_dic = dict(sorted(question_dic.items(), key=lambda x: x[1][0], reverse=True)) # 내림차순 정렬

score, cnt = 0, 0

for sub1, sub2 in sorted_dic.values():
  if cnt == K:
    break
  if L >= sub2:
    score += 140
    cnt += 1
  elif L >= sub1:
    score += 100
    cnt += 1

print(score)
  • 부분점수만 받았다..ㅜ

dictionary 정렬
sorted() 메소드의 key 매개변수에 익명함수인 lambda 함수를 사용하면 value 값을 기준으로 데이터를 정렬할 수 있다.
dic.items()의 경우 (key, value) 튜플 형태의 원소를 제공하기에
lambda에서 x[1]와 같은 방식으로 value 값을 지정할 수 있는 것이다.

하지만 여기서는 value가 (sub1, sub2)과 같은 튜플 타입이기 때문에,
sub1을 기준으로 정렬할 때 x[1][0]으로 지정할 수 있다.

내 풀이 - 3/30 추가

# N: 문제 개수
# L: 현정이가 풀 수 있는 레벨
# K: 현정이가 풀 수 있는 문제 개수
N, L, K = map(int, input().split())

score = 0
sub1_L, sub2_L = 0, 0 # L만 고려하여 풀 수 있는 sub1, sub2 문제수
for _ in range(N):
  sub1, sub2 = map(int, input().split())
  if L >= sub2:
    sub2_L += 1
  elif L >= sub1:
    sub1_L += 1

# L과 K를 고려하여 풀 수 있는 sub1, sub2 문제수
sub2_LK = min(K, sub2_L)
sub1_LK = min(K-sub2_LK, sub1_L)

# output
print(sub1_LK * 100 + sub2_LK * 140)
  • sub2_LKsub1_LK보다 먼저 계산해야한다.
    sub1_LK = min(K, sub1_L)
    sub2_LK = min(K-sub1_LK, sub2_L)
    

    이런식으로 순서를 바꾸면 부분점수만 받는다..!

다른 풀이

# 문제의 개수 N
# 현정이의 역량 L (난이도)
# 현정이가 대회중에 풀 수 있는 문제의 최대 개수 K
N, L, K = map(int, input().split())

sub1Cnt, sub2Cnt = 0, 0 # 난이도만 고려했을 때 풀 수 있는 sub1, sub2 문제수

for i in range(N):
  sub1, sub2 = map(int, input().split())
  if L >= sub2:
    sub2Cnt += 1
  elif L >= sub1:
    sub1Cnt += 1

# 문제는 최대 K개 까지만 풀 수 있다
sub2Tot = min(sub2Cnt, K) # ✅ K까지 고려했을 때 풀 수 있는 sub2 문제수
sub1Tot = min(sub1Cnt, K-sub2Tot) # ✅ K까지 고려했을 때 풀 수 있는 sub1 문제수
print(sub2Tot * 140 + sub1Tot * 100)
  • 이런 식으로 풀 수 있는 sub1, sub2 문제수를 각각 구하여 계산하면 더 쉽게 풀 수 있다.


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기