seunghyun Note

[프로그래머스] - 추억점수 with JAVA 본문

코딩테스트/백준

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

승숭슝현 2024. 1. 4. 09:56
728x90
반응형

 

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

 

프로그래머스

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

programmers.co.kr

문제 풀이

 

💻  3중 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++) {
				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;
		
	}
}

 

 - 단점 : 코드 실행이 오래 걸린다.

 - feedback : 처음에 contains함수를 써서 왜 틀렸는지 고민을 했지만 contains는 포함 문자를 찾는 것이기 때문에 equals를 사용하자

실행 속도가 너무 느림..

💻  HashMap 사용하기

HashMap은 Java에서 제공하는 데이터 구조 중 하나로, 키(key)와 값(value)을 가진 쌍으로 데이터를 저장하는 자료구조

 

HashMap 초기화:
처음에는 name과 yearning 배열을 사용하여 nameYearningMap이라는 HashMap을 만듭니다. 여기서 각각의 이름을 key로, 해당 이름에 대응하는 yearning 값을 value로 매핑합니다.

사진 처리:
photo 배열은 여러 개의 사진을 담고 있습니다. 코드는 사진 배열을 반복하면서 각 사진의 이름을 확인하고, 해당 이름이 nameYearningMap에 있는지 확인합니다.

매칭된 값 처리:
만약 이름이 매핑된 이름 목록에 존재한다면, 해당 이름의 yearning 값을 찾아 answer 배열의 현재 인덱스에 해당 값을 더합니다.

결과 반환:
최종적으로 각 사진에 대해 해당하는 이름의 yearning 값을 누적한 answer 배열을 반환합니다.

java

import java.util.*;

class Solution {
    public int[] solution(String[] name, int[] yearning, String[][] photo) {
        Map<String, Integer> nameYearningMap = new HashMap<>();
        int nameLength = name.length;

        // 이름과 yearning 값을 해시맵에 매핑
        for (int i = 0; i < nameLength; i++) {
            nameYearningMap.put(name[i], yearning[i]);
        }

        int photoLength = photo.length;
        int[] answer = new int[photoLength];

        // 각 사진에 대해 이름 확인 및 yearning 값 누적
        for (int i = 0; i < photoLength; i++) {
            for (int j = 0; j < photo[i].length; j++) {
                String currentName = photo[i][j];
                if (nameYearningMap.containsKey(currentName)) {
                    answer[i] += nameYearningMap.get(currentName);
                }
            }
        }

        return answer;
    }
}

gooood!!!

728x90
반응형