본문 바로가기
알고리즘/프로그래머스

[프로그래머스 / 추억 점수 / JAVA]

by KDW999 2023. 3. 31.

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

 

프로그래머스

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

programmers.co.kr

 

문제 접근

사진 속 인물은 여러 명이지만 모두를 그리워하진 않는다.
그리워하는 인물들은 따로 정해져있는데  이 인물들마다 그리움 점수가 있다.

이 그리워하는 인물들은 2차원 배열 안에 그룹별로 흩어져있다.
그룹별로 그리움 점수를 합산


그리워하는 이름들이랑 2차원 배열들이랑 일일이 비교하면 되지 않을까? 라는 생각이 들었는데 그렇게 단순한 문제면 일일이 비교했을 때 시간제한이 걸리게 만들어 놓지 않았을까? → 그런 거 없이 삼중 for문으로도 그냥 풀림, 예전에 정답률 50% 문제에도 끙끙 앓았던 적이 있어서 이 문제도 과대평가한 듯


name과 yearning 매칭은 map 사용하거나 for문은 같은 인덱스 별로 묶어 계산
배열은 0부터 N까지 돌아가면서 탐색
map은 해당 key에 있는 value를 바로 가져온다 → 속도 빠름

 

for문 풀이

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++) { // photo 요소
        	for(int j=0; j<photo[i].length; j++) { // photo 요소의 요소? 뭐라 부르지;
        		for(int k=0; k<name.length; k++) {
        			if(photo[i][j].equals(name[k])) answer[i] += yearning[k];
        		}
        	}
        }
        return answer;
    }
}

 

 

다른 사람 풀이

단순 배열보단 map을 활용한 풀이가 빨라서 그런지 다른 사람들은 map을 많이 활용하였더라

class Solution{
   public int[] solution(String[] name, int[] yearning, String[][] photo) {
        int[] answer = new int[photo.length];
        
        HashMap<String,Integer> map = new LinkedHashMap<>();
        
        for(int i=0; i< name.length; i++){
            map.put(name[i], yearning[i]); // 추억하는 사람 이름에 점수 저장
        }

        for(int i=0; i< photo.length; i++){
            String[] persons = photo[i]; // 그룹별 배열 생성
            int score = 0;
            
            for(int j=0; j<persons.length; j++){
            	
                String person = persons[j];
                if(map.containsKey(person)){ // map의 key에 photo 속 사람이 있다면
                    score+=map.get(person); // 점수 추가
                }
            }
            answer[i]=score;
        }
        return answer;
    }
  }

 

케이스가 짧은 건 몰라도 길어질다면 확실히 속도 차이가 난다.

댓글