ABOUT ME

Today
Yesterday
Total
  • section2.2 K번째 수
    알고리즘 2022. 10. 21. 20:14

    N개의 숫자로 이루어진 숫자열이 주어지면 해당 숫자 열중에서 s번째부터 e번째까지의 수를 오름 차순 정렬했을 때 k번째로 나타나는 숫자를 출력

     

     

    3번째 줄을 입력 받아야 하는데 n개로 계속 바뀜
    변수를 설정하고 거기에 값을 저장해야해서 for문을 어떻게 돌릴지 모르겠음
    map을 이용해서 바로 list에 넣을 수 있는지?
     
     
     
    import sys
    sys.stdin = open("input.txt", "rt")
    
    test = int(input())
    
    for x in range(test):
        
        list = []
        tlist = []
    
        n, s, e, k = map(int, input().split())
    
        # 방법1. 한 줄 입력이지만 for문으로 개별 값 받기 > 실패
        #for i in range(n):
        #    list.append(int(input()))
        # ValueError: invalid literal for int() with base 10: '5 2 7 3 8 9'
        
        # 방법2. map으로 받은 것 바로 append 해보기 > 실패
        #list = list.append(map(int, input().split()))
        # AttributeError: 'NoneType' object has no attribute 'append'
    
        # 방법3. 스트링으로 받고 split으로 끊고 리스트 담기 > 성공
        str = input()
     
        #print(str)
        #5 2 7 3 8 9
            
        list.append(str.split(" "))   
        #print(list)
        # [['5', '2', '7', '3', '8', '9']]
    
        for i in range(s-1, e):
            tlist.append(int(list[0][i]))
        # print(tlist)
        # [2, 7, 3, 8]
        
        tlist.sort()
        print('#',x+1,' ',tlist[k-1])

     

    3번째 줄을 어떻게 받는지 몰라서 일단 String으로 한 번에 받고 split 후 int로 변환해서 새 리스트에 넣었다

    정답을 맞히긴 했는데 괜히 복잡하게 푼 것 같아 찝찝하다

     

    import sys
    sys.stdin = open("input.txt", "rt")
    T = int(input())
    
    for t in range(T):
        n, s, e, k = map(int, input().split())
    
        a = list(map(int, input().split()))
        # print(a)
        # [5, 2, 7, 3, 8, 9]
    
        a = a[s-1:e]
        # print(a)
        # [2, 7, 3, 8]
    
    	a.sort()
        print("#%d %d" %(t+1, a[k-1]))

     

     

     

    1.

    파이썬에서는 리스트를 map으로 바로 생성 가능하다

    for문을 고려할 필요가 없었다

    > a = list(map(int, input().split()))

     

    2.

    인덱스 설정만 해주면 원하는 부분 바로 추출 가능하다

    > a = a[s-1:e]

     

    문법을 몰라서 어렵게 돌아간 부분이 아쉽다

    문법 제대로 숙지할 것

     

     

     

    ValueError: invalid literal for int() with base 10: '5 2 7 3 8 9'
    > intput으로 받은 값(5 2 7 3 8 9)이 int가 아니기 때문에 발생한 에러
    AttributeError: 'NoneType' object has no attribute 'append'
    > append 어트리뷰트가 없어서 발생한 에러, input값을 append 하지말고 바로 list로 담으면 됨
    > append는 값 1개를 담을 때 사용하고 extend는 값 여러개를 담을 때 사용한다

     

    728x90

    '알고리즘' 카테고리의 다른 글

    section2. 최솟값 구하기  (1) 2022.10.21
    section2.3 K번째 큰 수  (0) 2022.10.21
    section2.1 K번째 약수  (0) 2022.10.20
    VS Code 파이썬 개발환경 구축, txt 파일로 입출력 받기  (1) 2022.10.20
    파이썬 기본 문법 (3)  (0) 2022.10.20
Designed by Tistory.