728x90
반응형
2023.04.17
코테 문제풀이 26주차 01번 문제
문제
접근방법
1) indexOf(), 2중For문 등 효율성과 관련된 로직들을 배제
코드
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
return runningRace(players, callings);
}
/**
* 달리기 경주
* @param players 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열
* @param callings 해설진이 부른 이름을 담은 문자열 배열
* @return String[] 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 담은 배열
*/
public String[] runningRace(String[] players, String[] callings) {
/*
* @Desc
* 1.고정배열을 리스트로 변환
* 2.<순위,선수이름>, <선수이름,순위> 2개의 LinkedHashMap 선언
* 3.해설진이 선수이름을 부를때마다 2개 맵의 값을 변경
* 4.value(순위)를 기준으로 Map.sort
* 5.리스트에 담은 선수이름을 고정배열로 변환 후 리턴
*/
List<String> playersList = Arrays.asList(players);
List<String> callingsList = Arrays.asList(callings);
Map<Integer, String> playersMap = new LinkedHashMap<>();
Map<String, Integer> resultMap = new LinkedHashMap<>();
List<String> answer = new ArrayList<>();
for (int i=0; i<playersList.size(); i++) {
resultMap.put(playersList.get(i), i);
playersMap.put(i, playersList.get(i));
}
callingsList.forEach(call -> {
resultMap.put(playersMap.get(resultMap.get(call)-1), resultMap.get(call));
resultMap.put(call, resultMap.get(call)-1);
playersMap.put(resultMap.get(call)+1, playersMap.get(resultMap.get(call)));
playersMap.put(resultMap.get(call), call);
});
List<Map.Entry<String, Integer>> entryList = new LinkedList<>(resultMap.entrySet());
entryList.sort(Map.Entry.comparingByValue());
entryList.forEach(entry -> answer.add(entry.getKey()));
return answer.toArray(new String[answer.size()]);
}
}
결과
주의사항
1) 빅오표기법 관련 효율성 체크가 필요
728x90
반응형
'코딩테스트' 카테고리의 다른 글
[코테/JAVA] 연습문제 : 바탕화면 정리 (0) | 2023.05.21 |
---|---|
[코테/JAVA] 연습문제 : 추억 점수 (0) | 2023.04.17 |
[코테/JAVA] 2022 KAKAO TECH INTERNSHIP : 성격 유형 검사하기 (0) | 2023.01.30 |
[코테/JAVA] 2023 KAKAO BLIND RECRUITMENT : 개인정보 수집 유효기간 (0) | 2023.01.30 |
[코테/JAVA] 스택/큐 : 올바른 괄호 (2) | 2023.01.05 |
댓글