문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 핵심
-해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다
경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요.
문제 풀이법
-불린선수 배열이름을 선수 배열에서 찾을때마다
앞선수와 자리를 바꿔준다
풀이는 아주 간단했다 그래서 그냥 이중 포문을 사용해서 제출했다
그랬더니 몇개가 시간초과가 났다 그래서 map을 사용해야하나 하고 오래 고민했다
코드
public static String[] solution(String[] players, String[] callings) {
String[] answer = {};
Map<String, Integer> ranks = new HashMap<>();
for (int i = 0; i < players.length; i++) {
ranks.put(players[i], i + 1);
}
// System.out.println("초기등수 세팅:" + ranks);
for (int i = 0; i < callings.length; i++) {
int rank = ranks.get(callings[i]) - 1;
int newRank = rank - 1;
// System.out.println("순위변동전: " + players[rank] + "<-" + rank + "," + newRank + "->" + players[newRank]);
String originp = players[newRank];
players[newRank] = callings[i];
players[rank] = originp;
// System.out.println("순위변동후: " + players[rank] + "<-" + rank + "," + newRank + "->" + players[newRank]);
// System.out.println("랭크정리전: "+ranks);
ranks.put(callings[i], newRank+1);
ranks.put(originp, rank+1);
// System.out.println("랭크정리후: "+ranks);
}
// System.out.println(Arrays.toString(players));
return players;
}
결과

gpt피드백
배열인덱스를 통일하라
(맞다 이건 나도 힘들었다..)
배운점
이건 방식이어려운게아니라 시간초과 안나게하려고
map으로 한시간을 넘게 고민했다 너무 시간이 흘러서
gpt한테 살짝 힌트를 달라고 했다 player 배열도 같이 사용해보란느 조언이왔고
바로 머리가 번뜩였다. 그래서 map으로 for필요없이 바로바로 해당 선수의 순위를
저장하고 그순위에 맞게 player배열을 조정했다 문제가 어려운게아닌
더 좋은 방법을 찾느라 오래걸렸다
'코테 > lvl1' 카테고리의 다른 글
| 프로그래머스 1차다트 게임(lvl1) 풀어보기 (0) | 2026.10.05 |
|---|---|
| 프로그래머스 예산(lvl1) 풀어보기 (0) | 2026.10.05 |
| 프로그래머스 명예의 전당(1)(lvl1) 풀어보기 (0) | 2026.09.08 |
| 프로그래머스 덧칠하기(lvl1) 풀어보기 (0) | 2026.09.08 |
| 프로그래머스 체육복(lvl1) 풀어보기 (0) | 2026.09.08 |