Dia Egg - Shugo Chara

Python공부/프로그래머스

(Python)달리기 경주 (프로그래머스 Lv.1)

별ㅇI 2023. 6. 12. 20:02
728x90
반응형

달리기 경주 (프로그래머스 Lv.1)

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

 

프로그래머스

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

programmers.co.kr

 


처음으로 푼 코드

def solution(players, callings):
    answer = []
    for call in callings:
        for i, player in enumerate(players):
            if call == player :
                ept = players[i]
                players[i] = players[i-1]
                players[i-1]  = ept
    answer = players
    return answer

그러나 테스트 7~테스트13까지 시간초과로 오류가 발생했다. 

 

players의 최대 길이가 5만, callings의 최대길이가 100만이니까. 이러면 최악의 경우 players의 끝 인덱스까지 100만번 순회하므로. 그럼 5만 * 100만이 원하는 값을 반환하는데 소요하고 그중 4만9999 * 100만이 원하는 값을 찾는데 소요한다. . 즉, 값을 찾는시간을 줄여야 한다는 것..

그래서 딕셔너리를 이용해보기로 했다.

그렇게 만든 두번째 코드..!

def solution(players, callings):
    answer = []
    rank = {}
    for i, player in enumerate(players):
        rank[player] = i
    
    
    for call in callings:
        fir_index, sed_index = rank[call]-1, rank[call]
        players[fir_index],players[sed_index] = players[sed_index],players[fir_index]
        rank[players[fir_index]], rank[players[sed_index]] = rank[players[fir_index]]-1,rank[players[sed_index]]+1
            
    answer = players
    return answer

players = ["mumu", "soe", "poe", "kai", "mine"]
callings = ["kai", "kai", "mine", "mine"]
print(solution(players, callings))

딕셔너리의 활용법이나 enumerate함수를 까먹어서 서칭을 좀 많이 했지만 결국 완료.

이 부분에 대해 헷갈린 부분은 아래 링크로 정리해두었다.

 

https://star-ccomputer-go.tistory.com/36

 

(enumerate함수)for문에서 횟수와 객체를 동시에 가져오고 싶을때

rank = {} for i, player in enumerate(players): rank[player] = i 위와 같이 딕셔너리 같은 곳에 사용하기도 참 좋은 것같다.

star-ccomputer-go.tistory.com

https://star-ccomputer-go.tistory.com/35

 

딕셔너리 key, value값으로 정렬, 딕셔너리 리스트로 만들기

딕셔너리 key, value값으로 정렬 1. key값으로 정렬하는 방법(d가 원래의 딕셔너리) 만약 d2 = sorted(d) 로 한다면 value값이 빠지고 key값만 정렬된 리스트를 얻게 된다 따라서 맞는 코드는 이렇게! d1 = dic

star-ccomputer-go.tistory.com

 

728x90
반응형