본문 바로가기

코딩테스트

[프로그래머스] 달리기 경주 (lv1, Python)

반응형

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

 

프로그래머스

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

programmers.co.kr

 

문제 해결 아이디어

  1. 맨 처음엔 리스트끼리 자리를 바꿔주면 되겠다 라고 생각해서 작성해봤는데... 시간 초과
    다시 보니까 입력값이 굉장히 커서 10초안에 수행될 수 없었다.
  2. 선수 이름과 순위를 키값으로 하는 딕셔너리 두 개를 선언하여 각 키의 값을 수정하는 방식으로 소스코드를 작성함.
  3. 리스트를 계속해서 갱신할 경우, 인덱스 전체가 정렬되어 시간이 많이 걸리지만, 딕셔너리의 경우 대응하는 키의 값만 수정하게 되므로 속도가 훨씬 빠름
  4. rank 딕셔너리는 key 선수이름, value 순위, player 딕셔너리는 key 순위, value 선수이름
  5. 정답은 player 딕셔너리의 value 값을 호출

소스 코드 (Python)

def solution(players, callings):
    
    rank = {player:rank for rank, player in enumerate(players)}
    player = {rank:player for rank, player in enumerate(players)}
    
    for call in callings:
        pre = rank[call]
        rank[call] = pre-1
        after = player[pre-1]
        
        rank[after] = pre
        player[pre-1] = call
        player[pre] = after
        
        
        
    return list(player.values())

 

결과

굿굿

반응형