https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해시 함수를 배우고 관련 문제를 풀어보다가 풀게 된 문제이다.
이게,, 해시? 랑? 관련? 이라고 생각했는데 막상 풀어보니 딕셔너리로 풀어야 하는 문제더라.
사유:
이중 for문이나 filter를 이용하면 절대 통과되지 않는다 ,, ^_^
players의 길이가 5만, callings의 길이가 100만까지 가기 땜에 시간복잡도에 신경쓰면서 풀어야 한다.
이전에는 시간 복잡도 개념을 알기는 했지만 왠지 코딩테스트 문제를 풀면서 크게 신경 쓰지는 못했는데 (그래서 맨날 풀고 시간 초과 났음)
강의를 듣고 나니까 제한 사항을 보면 흠... 이건 뭘로 풀면 안 되겠군 하는 생각이 든다
근데 일단 머리를 깨 보고 아 역시 안 되네,,~ 하고 바꾸긴 한다 ㅋ.ㅋ
나중에는 이런 머리도 조금 늘겠지...
암튼!
풀이는 아래와 같다.
import Foundation
func solution(_ players:[String], _ callings:[String]) -> [String] {
var players = players
var dict: [String: Int] = [:]
for index in players.indices {
let player = players[index]
dict[player] = index
}
for call in callings {
let index = dict[call]!
let tempPlayer = players[index - 1]
players[index - 1] = players[index]
players[index] = tempPlayer
dict[tempPlayer]! += 1
dict[call]! -= 1
}
return players
}
'알고리즘' 카테고리의 다른 글
[Swift] Queue와 Stack 구현하기 (1) | 2023.12.24 |
---|