티스토리 뷰

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제이해

  • callings에 불리는 선수는 자기 바로 앞의 선수를 앞지르는 것이다.
  • 최종 player 순위를 보여주는 리스트를 구하자.

문제풀이

1.index()를 활용한 간단한 풀이 → 시간초과

  • 처음에는 단순히 index() 메서드를 통해 callings에 불리는 player의 인덱스를 구하고 이전 선수와 교체를 하는 방식으로 진행을 했다. 하지만 이는 시간초과가 일어나기 좋은 코드였고 이 코드는 시간초과로 실패하였다.

2.딕셔너리 두 개를 사용하는 풀이

  • 딕셔너리 하나는 key로는 player의 이름을 value로는 player의 순위를 가지는 딕셔너리이고 다른 하나는 이와 반대로 key로 player의 순위를 value로는 player의 이름을 가지는 딕셔너리이다.
  • 이렇게 두 개의 딕셔너리를 둔 이유는 순위를 최신화 하면서 순위별 선수이름까지 동시에 최신화를 시켜주기 위함이다.
def solution(players, callings):
    answer = []
    ranking1={value: idx for idx, value in enumerate(players)}
    ranking2={idx: value for idx, value in enumerate(players)}
    for calling in callings:
        name=ranking2[ranking1[calling]-1] # 현재 불린 선수의 바로 윗 순위 선수의 이름
        
        # 순위 최신화
        ranking1[calling]-=1
        ranking1[name]+=1
        
        # 순위별 선수 이름 최신화
        ranking2[ranking1[name]]=name
        ranking2[ranking1[calling]]=calling
    
    # 순위 오름차순으로 정렬
    sorted_dict=dict(sorted(ranking1.items(), key=lambda x:x[1]))

    return list(sorted_dict.keys())
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함