TIL
240222 TIL - Programmers 추억점수
Skipalong
2024. 2. 23. 01:08
이번주는 노로바이러스에 걸려서 TIL 도 못쓰고 내내 몸져누워있었다.
오늘부터는 몸이 좀 나아져서 팀원들과 스터디를 재개했는데 알고리즘 풀이를 시작하였다. 오늘 푼 문제 중에 프로그래머스 추억점수라는 문제가 있었다. https://school.programmers.co.kr/learn/courses/30/lessons/138476
이 전에는
class Solution {
public int[] solution(String[] name, int[] yearning, String[][] photo) {
int[] answer = new int[photo.length];
for(int i=0; i<photo.length; i++){
for(int j=0; j<photo[i].length; j++){
for(int k=0; k<name.length; k++){
if(photo[i][j].equals(name[k])){
answer[i] += yearning[k];
}
}
}
}
return answer;
}
}
이런식으로 삼중for문을 사용해서
이런 결과가 나왔었는데 이전에 풀 당시에는 Map에 대한 이해가 전혀 없었어서 이런식으로 풀이를 했지만
이번에 다시 보니 Map을 사용해서 풀면 효율적으로 풀이를 할 수 있을 것 같았다.
그래서 다시 풀이를 해 보았을 때는
import java.util.*;
class Solution {
public int[] solution(String[] name, int[] yearning, String[][] photo) {
int[] answer = new int[photo.length];
Map<String, Integer> map = new HashMap<>();
for(int i=0; i<name.length; i++) {
map.put(name[i], yearning[i]);
}
for(int i=0; i<photo.length; i++) {
for(int j=0; j<photo[i].length; j++) {
if(map.containsKey(photo[i][j])) {
answer[i] += map.get(photo[i][j]);
}
}
}
return answer;
}
}
이런식으로 map을 사용해서 풀이를 해 보았다.
그리고 채점결과를 보았을 때
이렇게 훨씬 빨라진 처리속도를 볼 수 있었다. 아직 Collection자료구조에 대한 이해가 깊지는 않지만 이런식으로 익숙해지면
알고리즘테스트와 실제코드에 적용을 통해 성능개선에 많은 도움이 될 것 같고 팀원들과 코드 리뷰를 통해 많은 성장을 할 수 있을 것 같다.