본문 바로가기

코딩테스트 준비 with Python/내가 보려고 정리하는 문풀

K번째 수

첫번째 줄에 테스트케이스 갯수 T가 주어지고, 

각 케이스별로 N개의 숫자로 이루어진 공백구분 숫자열이 주어지면

해당 숫자열중에서 s번째부터 e번째 까지의 수를 오름차순 정렬하여

K번째로 나타나는 숫자를 출력하는 프로그램 작성

 

입력예시)

2

6 2 5 3

5 2 7 3 8 9

15 3 10 3

4 15 8 16 6 6 17 3 10 11 18 7 14 7 15

 

*첫번째 줄은 테스트케이스 갯수 T

두번째 줄은 순서대로 N, s, e , K세번째 줄은 N개의 숫자로 이루어진 숫자열

 

출력예시)#1 7#2 6


내가 쓴 코드

#테스트케이스 갯수
T = int(input())

#테스트케이스 수 만큼 반복
for i in range(1,T+1):
    N, s, e, k = map(int, input().split())
    lst = list(map(int, input().split()))
    lst2 = lst[s-1:e]
    lst2.sort()
    print('#%d %d'%(i,lst2[k-1]))

모범답안

T = int(input())

for t in range(T):
    n, s, e, k = map(int,input().split())
    a = list(map(int,input().split()))
    lst = lst[s-1:e]
    lst.sort()
    print('#%d %d' %(t+1,a[k-1]))

모범답안 보고 반성하기

  • 굳이 lst2를 만들 필요가 없었다 이 멍청이
  • s번째부터 e번째 까지 슬라이싱 한 리스트를 다시 덮어씌우는 방식을 사용했으면 되었을 것
  • 왜냐면 슬라이싱 한것만 필요하잖아..
  • 쓸데없이 메모리공간을 사용한 죄
  • 생각을 더 해라

반성했으면 다시 풀어보기

T = int(input())
for i in range(1,T+1):
    N, s, e, k = map(int, input().split())
    lst = list(map(int, input().split()))
    lst = lst[s-1:e]
    lst.sort()
    print('#%d %d' %(i,lst[k-1]))

 

'코딩테스트 준비 with Python > 내가 보려고 정리하는 문풀' 카테고리의 다른 글

자릿수의 합  (2) 2024.06.08
정다면체  (0) 2024.06.07
대표값  (0) 2024.06.06
K번째 큰 수  (0) 2024.06.06
K번째 약수  (0) 2024.06.06