알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

 

1등부터 3등

mumu soe poe

soe 를 불렀으면 soe가 mumu를 추월

soe mumu poe

 

callings의 배열만큼 돈다.

그럼 추월이 끝난거니깐 .. 

 

일단 규칙을 찾기 위해 테스트 케이스를 하나 더 생각해보면서 패턴을 파악한다.

 

무무 , 소 , 포 , 카이 , 마인 이런식으로 있음

카이

무무 소 카이 포 마인

카이

무무 카이 소 포 마인

마인 

무무 카이 소 마인

마인

무무 카이 마인 소 포

 

무무 소 포 카이 마인

무무 카이 마인 소 포 

 

그럼 만약에 무무 소 포 카이 마인 이였을 경우

카이 마인 포 소 무무 이런식으로 한번 불렀을 때

 

무무 소 포 카이 마인

카이

무무 소 카이 포 마인

마인

무무 소 카이 마인

무무 소 카이 마인

무무 카이 포 마인

무무

무무 소 카이 포 마인

 

마인 포 소 무무 카이 이면?

무무 소 포 카이 마인

마인

무무 소 포 마인 카이

무무 소 마인 카이

무무 포 마인 카이

무무 ? 가 나올수 없음

 

흠 규칙이 잘 안보이는데

불러진 횟수를 만약 HashMap으로 카운트해서 받는다고 치자

처음 등수를 먼저 가지고있고,

1등 무무 2등 소 3등 포 4등 카이 5등 마인

                                           -2         -2

카이 2번 , 마인 2번 나왔으면?

카이가 올라옴? ... 이러면 이쪽에서는 규칙 찾기가 쉽지 않다..

 

그럼 다른 방법으로 해보자

 

일단 반복문은 callings을 돌린다.

HashMap으로 처음 등수를 저장한다.

그리고 "mumu" , "1" 이런식 1등인데 만약 2등이 찍히면 -1 값에는 mumu에서 +를 해주고 , 해당 값은 -를 해준다.

import java.util.HashMap;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = players;
        
        HashMap<String, Integer> map = new HashMap();
        for(int i=0; i<players.length; i++){
            map.put(players[i],i+1); 
        }
        
        for(int i=0; i<callings.length; i++){
            
            String nP = callings[i]; // [kai]
            int nPRank = map.get(nP) - 1; // 현재 nP의 위치
            String hP = players[nPRank-1]; // [kai 앞인 poe]
            
            players[nPRank-1] = nP;
            players[nPRank] = hP;
            map.put(nP, nPRank);
            map.put(hP, nPRank+1);
        }
        
        return answer;
    }
}

 


Solution✍

 

import java.util.HashMap;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = players;
        
        HashMap<String, Integer> map = new HashMap();
        for(int i=0; i<players.length; i++){
            map.put(players[i],i+1); 
        }
        
        for(int i=0; i<callings.length; i++){
            
            String nP = callings[i]; // [kai]
            int nPRank = map.get(nP) - 1; // 현재 nP의 위치
            String hP = players[nPRank-1]; // [kai 앞인 poe]
            
            players[nPRank-1] = nP;
            players[nPRank] = hP;
            map.put(nP, nPRank);
            map.put(hP, nPRank+1);
        }
        
        return answer;
    }
}

Review🤩

 

HashMap을 이용해서 푸니깐 바로 풀어졌다. 

players의 등수도 계속 바꿔줘야함 !


 

+ Recent posts