https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
LV 1
구현 방법
처음 : 이중 포문으로 원하는 값 찾아서 위치 바꾸기
하지만,
3 ≤ players[i]의 길이 ≤ 10
2 ≤ callings의 길이 ≤ 1,000,000
으로 이중 포문 돌리니까 런타임 에러 뜸
나중 : players 배열을 해시맵<player 이름, player 랭크>으로 바꿔서 원하는 값 찾을때 O(1)로 바꿔서 구현
주의점은 랭킹 바꿀때 players 배열만 업데이트 하는게 아니라 해시맵 정보도 업데이트 해줘야 함.
코드
처음 코드(런타임 에러)
class Solution {
public String[] solution(String[] players, String[] callings) {
for(String cur : callings) {
for(int i = 0; i < players.length; i++) {
if(players[i].equals(cur)) {
players[i] = players[i - 1];
players[i-1] = cur;
}
}
}
return players;
}
}
나중 코드
import java.util.HashMap;
import java.util.Map;
class Solution {
public String[] solution(String[] players, String[] callings) {
Map<String, Integer> curRank = new HashMap<>();
for(int i = 0; i < players.length; i++) {
curRank.put(players[i], i);
}
for(String cur : callings) {
Integer tempRank = curRank.get(cur);
players[tempRank] = players[tempRank - 1];
curRank.put(players[tempRank - 1], tempRank);
players[tempRank - 1] = cur;
curRank.put(cur, tempRank - 1);
}
return players;
}
}
느낀 점
최근에 네이버 코테 치고 자신감이 낮아져서 쉬운 문제 풀었다. 아직 자바 기본 라이브러리도 안익숙해서 많이 써봐야 할것 같고, 복잡한 문제 읽고 이해하는게 오래 걸려서 그런 문제들 많이 접해봐야 할 것 같다. 아직 많이 부족한거 같은데 하면 또 될것 같기도 하다.
'알고리즘' 카테고리의 다른 글
자바 - 프로그래머스 / 연속된 부분 수열의 합 (0) | 2023.04.24 |
---|---|
자바 - 프로그래머스 / 행렬 테두리 회전하기 (0) | 2023.04.21 |
자바 - 프로그래머스 / 추억 점수 (0) | 2023.04.18 |
자바 - 백준 20055 / 컨베이어 벨트 위의 로봇 (1) | 2023.04.13 |
자바 - 백준 12101 / 1, 2, 3 더하기 2 (0) | 2023.04.10 |