Algorithm/파이썬 알고리즘 문제풀이 강의

[코드 구현력 기르기] 2. K번째 수

이숨인 2023. 3. 8. 17:49

1. 문제

 

 

 

2. 내 코드

import sys
sys.stdin=open("input.txt","rt")


#N,K=map(int,input().split())

T=int(input())
for x in range(T): # case1부터 시작
    N,s,e,k=map(int,input().split())
    lst=list(map(int,input().split())) //한 줄 띄어쓰기로 들어온 것이 int화되고 list화 된다
    #lst=list(input().split()) //틀린코드 -> map함수 사용 x
    obj_list=lst[s-1:e-1] // 틀린코드 -> [s-1:e]로 수정 = s번째부터, e번째까지를 의미
    obj_list.sort
    for y in obj_list: //틀린코드 -> for문 생각할 필요가 없었다.. 그냥 k-1을 인덱스로 print하면 됐는데..
        if y == obj_list[k]:
            print("#",x+1,end=' ')
            print (y)
            break

 

3. 정답

import sys
sys.stdin=open("input.txt","rt")
T=int(input())
for t in range(T): # case1부터 시작
    N,s,e,k=map(int,input().split())
    lst=list(map(int,input().split()))

    obj_list=lst[s-1:e] 
    obj_list.sort()
    print("#%d %d" %(t+1,obj_list[k-1]))

4. 반성점

  • map함수를 못써먹은 구간이 있었다.
  • 리스트 슬라이스의 개념을 잘 몰랐다.
  • 쉽게 생각하면 되는 부분을, 지레 겁먹고 복잡하게 for문으로 생각했다.

5. 배운점

<잘못한점>

  • 리스트 슬라이스의 개념을 잘 몰랐다.

인덱스에서 s-1은 잘 했지만, 리스트 슬라이스의 경우, 뒤에 오는 숫자-1의 인덱스까지를 의미하므로, e-1가 아니라 2가 맞다!

  • map함수를 못써먹은 구간이 있었다.
  • 리스트 슬라이스 기능

s와 e는 번째이지, 리스트의 인덱스에서는 1만큼 감소한다.

 

6. 추가적으로 공부할 개념

  • 파이썬인데 저렇게 출력하는 방식은 C언어 어닌가?? 왜 저렇게 출력했는지, %d이런거 알아봐야 겠다.