-
section2.3 K번째 큰 수알고리즘 2022. 10. 21. 22:04
현수는 1부터 100 사이의 자연수가 적힌 N장의 카드를 가지고 있습니다.
같은 숫자의 카드가 여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 합니다.
3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값 은 22입니다.
import sys sys.stdin = open("input.txt", "rt") N, k = map(int, input().split()) a = list(map(int, input().split())) b = [] # 2중 for문 사용 for x in range(N-2): sum = 0 for y in range(3): sum += a[x] #TypeError: unsupported operand type(s) for +=: 'builtin_function_or_method' and 'int' #print(a[x]) #print(type(a[x])) x += 1 b.append(sum) b.sort() print(b) # [62, 70, 72, 79, 102, 109, 133, 143]
문제도 잘 못 읽고 for문을 잘 못 썼다
# 3중 for문 사용 for x in range(N-2): #print("x ",x) for y in range(x+1, N-1): #print("y ",y) for z in range(y+1, N): #print("z ",z) sum = a[x] + a[y] + a[z] b.append(sum) #print(a[x], a[y], a[z]) #print(sum) #print(' ') sum = 0 b = list(set(b)) b.sort(reverse=True) print(b[k-1]) # 143
3중 for문으로 작성했고 for문의 범위 찾는데 시간이 오래 걸렸다
그래도 정답은 맞혔다
모든 경우의 수를 찾았는지는 확신이 없다
import sys sys.stdin = open("input.txt", "rt") n, k = map(int, input().split()) a = list(map(int, input().split())) res = set() # 중복 제거하기 위한 set for i in range(n): for j in range(i+1, n): for m in range(j+1, n): res.add(a[i]+a[j]+a[m]) res = list(res) res.sort(reverse=True) print(res[k-1])
답이랑 내 풀이랑 비슷하다
풀이 시간이 조금 길었던 점이랑 sum을 굳이 안 만들어도 괜찮았는데 아쉽다
TypeError: unsupported operand type(s) for +=: 'builtin_function_or_method' and 'int'> 파이썬의기본연산이 불가능한 타입끼리 연산했기 때문에 발생한 오류> sum을 처음에 int로 초기화하지 않아서 오류가 났다> sum=0 으로 오류 해결728x90'알고리즘' 카테고리의 다른 글
section2.4 대표값 (0) 2022.10.22 section2. 최솟값 구하기 (1) 2022.10.21 section2.2 K번째 수 (0) 2022.10.21 section2.1 K번째 약수 (0) 2022.10.20 VS Code 파이썬 개발환경 구축, txt 파일로 입출력 받기 (1) 2022.10.20