BoJ 8321 - Supermarket [with Python / 문제 한국어로 번역]

ssook·2023년 9월 29일
0

BoJ 문제기록

목록 보기
20/29
post-thumbnail

📍 문제

"여기도 할인, 저기도 할인! 곧 할인을 해 드릴게요, 따란딴딴🔔"

이 노래는 최근 스톤카 슈퍼마켓의 스피커에서 재생되는 즐거운 노래입니다!

그리고 지금 스톤카 슈퍼마켓에서 하고 있는 할인에 대한 규칙은 다음과 같습니다 :
각 고객은 상점에 일정 금액을 남깁니다.
하루가 끝날 때, 상점 경영진은 임의의 번호 k를 선택합니다.
그런 다음, 그들은 그 날 상점에서 가장 많은 금액을 쓴 k번째 큰 금액을 찾아서 그 고객에게 무료로 견과류가 들어간 초콜릿을 보내줍니다. (물론, 그 초콜릿은 "스톤카 식료품점에서 만들어졌습니다."라고 적혀 있습니다.)
당신은 슈퍼마켓에서 고객이 사용한 금액이 중복될 때에는 어떤 방식으로 초콜릿을 받을 행운의 주인을 선택할지 궁금할 것입니다.
하지만, 우리는 그냥 질문을 하는 것이 목적입니다.
따라서 당신은 단순히 중복을 고려하지 않고 특정 날짜에 사용된 금액 중에서 k번째로 큰 금액을 찾기만 하면 됩니다!

입력

첫 번째 줄에는 자연수 d (1 ≤ d ≤ 100)가 포함되어 있으며,
이는 테스트 케이스의 수를 나타냅니다.

각 테스트 케이스의 첫 번째 줄에는 특정 날 스톤카 슈퍼마켓을 방문한 고객 수를 나타내는 정수 n, 그리고 k (1 ≤ n ≤ 1000000; 1 ≤ k ≤ n)가 포함됩니다.
각 테스트 케이스의 두 번째 줄에는 고객들이 상점에 남긴 금액을 나타내는 n개의 정수가 연속적으로 포함되어 있습니다. 이 금액들은 1부터 100000까지의 범위 내 정수입니다.

출력

각 테스트 케이스에 대해 스톤카 슈퍼마켓에 남겨진 금액 중 k번째로 큰 값을 출력해주세요.


📍 아이디어

실제 코드 난이도는 브론즈 3? 2? 정도의 수준으로 굉장히 간단한 로직인데,
아마 문제가 폴란드어여서... 그래서 사람들이 접근하지 못했던 거 같다.
문제를 이해하고 풀어야 하는데 너무나도 생소한 언어여서 문제 자체에 접근하기가 쉽지 않으니...

일단 로직 자체는, n과 k 값을 받은 다음 스톤카 슈퍼마켓에서 구매한 고객의 금액 량을 리스트로 만들어 준다.
그 리스트를 정렬하고 나서 k-1번째 인덱스의 값을 출력하면 끝!


📍 제출코드


t = int(input())

for i in range(t):
  n, k = map(int, input().split())
  stonka = list(map(int, input().split()))

  stonka.sort()
  print(stonka[k-1])

profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글