728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해결 아이디어
- 맨 처음엔 리스트끼리 자리를 바꿔주면 되겠다 라고 생각해서 작성해봤는데... 시간 초과
다시 보니까 입력값이 굉장히 커서 10초안에 수행될 수 없었다. - 선수 이름과 순위를 키값으로 하는 딕셔너리 두 개를 선언하여 각 키의 값을 수정하는 방식으로 소스코드를 작성함.
- 리스트를 계속해서 갱신할 경우, 인덱스 전체가 정렬되어 시간이 많이 걸리지만, 딕셔너리의 경우 대응하는 키의 값만 수정하게 되므로 속도가 훨씬 빠름
- rank 딕셔너리는 key 선수이름, value 순위, player 딕셔너리는 key 순위, value 선수이름
- 정답은 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())
결과
굿굿

반응형
'코딩테스트' 카테고리의 다른 글
[백준] 10798번: 세로읽기(브론즈1, Python) (0) | 2023.08.04 |
---|---|
[백준] 2738번: 행렬 덧셈 (브론즈5, Python) (0) | 2023.08.03 |
[백준] 2566번: 최댓값 (브론즈3, Python) (0) | 2023.08.02 |
[백준] 2444번: 별 찍기 - 7 (브론즈3, Python, for문 한번 사용) (0) | 2023.08.01 |
[백준] 25206번: 너의 평점은 (실버5, Python) (0) | 2023.07.31 |