코딩 테스트

프로그래머스) 달리기 경주 Lv1

우루쾅 2024. 2. 12. 17:19
728x90
반응형
SMALL

맨 처음 순서를 정해준 뒤 호출하는 이름이 앞 순번에 달리는 선수와 순번이 바뀌는 문제!

 

hashMap 으로 문제를 풀어보았는데 계속 3번째에서 순번이 바뀌지 않는 현상이 있었다....

 

확인해보니 key value 값으로 저장한 부분에서 value 값에 따라 순번을 체크했었는데,

자리값으로 순번을 매기고 있어서 내가 원하는 대로 순번이 바뀌지 않았다...

 

(오답 소스)

import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];
        Map<String, Integer> map = new HashMap<>();
        
        // map 에 데이터 현재 플레이어 insert
        for(int i=0; i<players.length; i++){
            map.put(players[i], i);
        }
        
        // 부르는 이름 한칸 앞으로 전진
        for(int i=0; i<callings.length; i++){
            // 이름 불린 선수의 등수
            int curNum = map.get(callings[i]);
            
            // 이름 불린 선수의 앞 선수 확인
            String preNm = "";
            for(int value : map.values()){
                if(value == (curNum-1)){
                    System.out.println(players[value] + ", " + value);
                    preNm = players[value];
                    break;
                }
            }
            
            // System.out.println("현재 등수 : "+curNum +", 이름 : "+callings[i]);
            // System.out.println("앞 등수 : "+ (curNum-1) +", 이름 : "+preNm);
            
            // 이름 불린 선수의 앞 선수는 등수 뒤로 한칸
            map.put(preNm, curNum);
            
            // 이름 불린 선수는 등수 앞으로 한칸
            map.put(callings[i], curNum-1);

            //* 변경될 친구들 이름
            System.out.print("이름 불린 사람 : "+callings[i] +" -> "+(curNum-1)+", ");
            System.out.println(preNm +" -> "+curNum);
            
            for(String key : map.keySet()){
                System.out.print(key+" : "+ map.get(key) +", ");
            }
            System.out.println();
        }
        
        System.out.print(map.get("mumu")+", "+map.get("soe")+", "+map.get("poe")+", "+map.get("kai")+", "+map.get("mine"));
        
        for(int i=0; i<map.size(); i++){
            //answer[i] = map.get(i);
        }
        
        return null;
    }
}

 

의미없이 빙글빙글 돌다가 다른 사람의 코드를 보고 깨달음을 얻어서 바로 문제를 해결했다...

 

뭔가 내가 하려던 방향은 맞는데 방법이 잘못돼서 마음이 아팠다...

 

 


정답

import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = {};
        
        Map<String, Integer> map = new HashMap<>();
        
        for(int i=0; i<players.length; i++){
            map.put(players[i], i);
        }
        
        for(String curPlayer : callings){
            int curNo = map.get(curPlayer);
            String frontPlayer = players[curNo-1];
            
            players[curNo] = frontPlayer;
            players[curNo-1] = curPlayer;
            
            map.put(frontPlayer, curNo);
            map.put(curPlayer, curNo-1);
        }
        
        return players;
    }
}

 

 

 

출처

프로그래머스 - https://school.programmers.co.kr/learn/courses/30/lessons/178871#qna

 

728x90
반응형
LIST