Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Parametric Search
- lv3
- 멀티 스레드
- OS
- 세그멘테이션
- 트랜잭션
- java
- 최장증가부분수열
- MVCC
- synchronized
- 프로그래머스
- 방문길이
- 멀티 프로세스
- 함께 자라기
- 틱택토
- multi-thread
- 자바
- lis
- 아키텍처 개선
- MESI
- Runtime data area
- try-with-resource
- 표현 가능한 이진트리
- 이분탐색
- 실행과정
- 이펙티브자바
- 멀티 코어
- 캐시라인
- try-catch-finally
- 메모리계층구조
Archives
- Today
- Total
siino's 개발톡
달리기 경주 - 코틀린 본문
요즘은 코틀린에 관심이 생겨 코틀린으로도 쉬운문제 위주로 차근차근 풀려고 노력중입니다 :)
우선 문제는 아래 링크에 첨부하겠습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/178871
처음 문제를 해결하기 위해 생각했던건, calling에 들어있는 사람들의 이름을 indexOf함수로 해당 index를 찾아 그 앞 index와 자리를 바꾸도록 생각했습니다.
하지만 문제 조건에 의해 players의 길이는 최대 5만, calling의 길이는 최대 100만이기 때문에 calling의 모든 요소에 대해 indexOf를 수행한다면, 100만 * 5만 = 500억 만큼의 연산을 하게 됩니다.
따라서 보다 효율적인 방법을 생각하였고 Map을 통해 해결할 수 있음을 생각했습니다.
nameToRank라는 mutableMap으로 해당 K,V는 각각 String,Int타입을 갖게 선언하였고 해당 이름을 가진 선수의 현재 등수를 기록합니다. calling의 요소에 따라 nameToRank map에서 현재 등수를 찾고 바로 앞 등수의 사람과 자리를 바꿔준 후 map도 갱신을 시켜줍니다.
class Solution {
fun solution(players: Array<String>, callings: Array<String>): Array<String> {
var nameToRank: MutableMap<String, Int> = hashMapOf()
players.forEachIndexed { index, player -> nameToRank[player] = index }
callings.forEach {
player -> var findIndex = nameToRank[player]!!
var switchedPlayer = players[findIndex - 1]
//원래 배열 자리바꾸기
players[findIndex] = switchedPlayer
players[findIndex - 1] = player
//Map update
nameToRank[player] = nameToRank[player]!! - 1
nameToRank[switchedPlayer] = nameToRank[switchedPlayer]!! + 1
}
return players
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 베스트앨범 - Java (0) | 2024.03.07 |
---|---|
[프로그래머스] 아이템 줍기 (0) | 2024.03.04 |
[프로그래머스] 혼자서 하는 틱택토 (0) | 2024.02.14 |
[프로그래머스] 입국심사 (1) | 2024.02.07 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT[1차] 프렌즈4블록 (1) | 2024.01.26 |