ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.