알고리즘 풀이 방법입니다.
문제(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의 등수도 계속 바꿔줘야함 !
'Algorithm' 카테고리의 다른 글
[프로그래머스] 구명보트 (0) | 2024.01.16 |
---|---|
[프로그래머스] 3월에 태어난 여성 회원 목록 출력하기 , 대여 기록이 존재하는 자동차 리스트 구하기 , 가격대 별 상품 개수 구하기 , 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.01.15 |
[프로그래머스] [PCCE 기출문제] 9번 / 이웃한 칸 (1) | 2024.01.15 |
[프로그래머스] 둘만의 암호 (0) | 2024.01.11 |
[프로그래머스] 대충 만든 자판 (0) | 2024.01.09 |