ALGORITHM/Swift
[알고리즘] Swift -프로그래머스 연습문제 #178871(달리기 경주)
늘스토리 주인장
2023. 5. 30. 20:22
728x90
반응형
문제링크
분석
해설진은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부른다.
예를 들어 1등부터 3등까지 mumu, soe, poe 선수들이 순서대로 달리고 있을 때
해설진이 seo 선수를 불렀다면 1등인 mumu 선수를 추월했다는 뜻이다.
즉 seo 선수가 1등, mumu 선수가 2등으로 바뀐다.
선수들의 이름이 1등부터 현재 등수 순서대로 담긴 배열과 해설진이 부른 이름이 담긴 배열이 주어질 때, 경기가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아서 리턴하는 문제이다.
풀이 과정
해설진이 부른 이름의 인덱스를 앞의 선수의 인덱스와 변경해준다.
더보기
import Foundation
func solution(_ players:[String], _ callings:[String]) -> [String] {
var players = players
for calling in callings {
if let index = players.firstIndex(of: calling) {
players.swapAt(index-1, index)
}
}
return players
}
배열로 index를 찾게 될 경우에 만약 꼴등의 선수를 부르게 된다면 마지막까지 반복문을 돌리게 되서 시간이 오래 걸린다.
dictionary를 이용하여 해당하는 선수의 이름을 찾아 등수를 변경해주면 빠르게 할 수 있다.
풀이
import Foundation
func solution(_ players:[String], _ callings:[String]) -> [String] {
var players = players
var player = [String: Int]()
for (index, name) in players.enumerated() {
player[name] = index
}
for name in callings {
guard let index = player[name] else {
continue
}
let pre = index - 1
players.swapAt(pre, index)
player[players[pre]]! -= 1
player[players[index]]! += 1
}
return players
}
결과
print(solution(["mumu", "soe", "poe", "kai", "mine"] , ["kai", "kai", "mine", "mine"] ))
📂 정리
enumerated()
- 배열을 가지고 반복문을 돌릴 때 순서와 요소를 튜플형태로 리턴해주는 메소드
swapAt()
- 인덱스를 이용하여 값을 변경시키는 메소드
728x90
반응형