ABOUT ME

Today
-
Yesterday
-
Total
-
  • 1205. 등수 구하기
    Algorithm/Baekjoon 2023. 3. 6. 23:09

    처음엔 단순히 for문 돌려가면서 풀었는데, 문제를 읽으면서 놓친 부분이 꽤나 많았다.

    예를 들어 예제 입력 4 처럼 n이 0인 경우에는 무조건 1이 나와야 한다는 점이나,

    등수는 p보다 작지만 동점자로 인해 랭킹 리스트에 들지 못할 수 있다는 점 등등... 

    "틀렸습니다"를 확인해가며 고쳤다.

     

    코드는 아래와 같다.

    import sys
    input = sys.stdin.readline
    
    def get_rank(new, scores, p) :
        cnt = 0
        before_rank = 1
        for i, score in enumerate(scores) : 
            if cnt == p :
                return -1
            if new > score :
                if scores[i-1] == new : 
                    return before_rank
                else :
                    return cnt+1
            cnt += 1
            if i >= 1 and scores[i-1] != score :
                before_rank = cnt
        if cnt < p :
            if scores[-1] == new : 
                return before_rank
            else :
                return cnt+1
        return -1
        
    n, new_score, p = map(int, input().split())
    if n != 0 :
        scores = list(map(int, input().split()))
        print(get_rank(new_score, scores, p))
    else :
        print(1)

    코드를 더 깔끔하게 정리할 수 있을 것 같았다.

    리스트 메소드를 통해 새로운 점수가 몇 등인지를 더 쉽게 구하여 답을 낼 수 있었다.

     

    import sys
    input = sys.stdin.readline
    
    n, new_score, p = map(int, input().split())
    
    if n == 0 :
        answer = 1
    else : 
        scores = list(map(int, input().split()))
        scores.append(new_score)
        scores.sort(reverse=True)
        first_idx = scores.index(new_score)
        same_score = scores.count(new_score)
        if first_idx + same_score > p :
            answer = -1
        else :
            answer = first_idx+1
        
    print(answer)

     

    시간은 이런 차이를 보였다. 큰 차이는 없는 듯함.

    'Algorithm > Baekjoon' 카테고리의 다른 글

    10971. 외판원 순회  (0) 2023.03.19
    9663. N-queen  (0) 2023.03.06
    1009. 분산처리  (0) 2023.03.01
    11723. 집합  (0) 2023.02.27
    1018. 체스판 다시 칠하기  (0) 2023.02.20

    댓글

Designed by nanometre380.