[Spring#32] 오늘 뭐 먹지? 프로젝트 API 개발 / 알고리즘 : 달리기 경주

김한준 Hanjun Kim·2023년 11월 23일
0

내일배움캠프

목록 보기
32/70

알고리즘

처음 코드

import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = {};
        Map<Integer,String> map = new HashMap<Integer,String>();
                
        for(int i=0;i<players.length;i++){
            map.put(i,players[i]);
        }
        
        for(String call : callings){
            int i = getKey(map,call);
            String getName = (String)map.get(i-1);
            map.put(i,getName);
            map.put(i-1,call);                
        }
        
        Collection<String> values = map.values();        
        answer = values.toArray(new String[0]);
        
        
        return answer;
    }
    
    public int getKey(Map<Integer,String> map, String call){
        for(Integer key : map.keySet()){
            if(call.equals(map.get(key))){
                return key;
            }
        }
        return 0;
    }
}

수정코드

import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];

		HashMap<String, Integer> mappedByPlayer = new HashMap<>();
		HashMap<Integer, String> mappedByRank = new HashMap<>();

		for (int i = 0; i < players.length; i++) {
			mappedByPlayer.put(players[i], i);
			mappedByRank.put(i, players[i]);
		}

		for (int i = 0; i < callings.length; i++) {
			int currentRank = mappedByPlayer.get(callings[i]);
			String player = mappedByRank.get(currentRank);

			String frontPlayer = mappedByRank.get(currentRank - 1);

			mappedByPlayer.put(player, currentRank - 1);
			mappedByPlayer.put(frontPlayer, currentRank);

			mappedByRank.put(currentRank - 1, player);
			mappedByRank.put(currentRank, frontPlayer);
		}

		for (int i = 0; i < players.length; i++) {
			answer[i] = mappedByRank.get(i);
		}
        
        return answer;
    }
}
  • 처음 코드는 실행하였을 때 런타임 오류가 난다.
    이유는 로직의 복잡성? 때문인것 같다.
    그래서 랭크를 따로 메기고, 해당하는 위치에 put으로 교체 해주니 시간복잡도가 줄어들어서
    실행이 되었다.

이번 알고리즘 문제를 풀면서 import를 통해 라이브러리를 가져오는것과, 다른분들의 코드를 보면서
for문을 쓰더라도 효율적으로 쓰는걸 배웠다.


오늘 뭐 먹지? 프로젝트 API 개발

Comment

  • 아침에 팀원분들이 작성한 코드를 보면서 내 코드는 뭔가 잘못되었다는걸 깨달았다.
    그래도 든든한 팀원분들이 인텔리제이의 Code With me를 통해 도와주셔서
    User데이터를 가져와서 인증하는 코드로 탈바꿈하였다.

  • 그래도 아직 이해가 덜 가서..

특히 CommentLike부분의 복합키 부분과
builder와
ID 사용하는 부분

쪽을 더 공부 해 봐야할것 같다.

그래도 테스트를 해보니 Comment부분은 데이터 잘 들어가서 뿌듯하다!

profile
개발이 하고싶은 개발지망생

0개의 댓글