-
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