[프로그래머스] Lv.1 추억 점수 (Java)

2023. 8. 21. 17:17·Algorithms(CT)/Programmers
 

프로그래머스

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

programmers.co.kr

 

===문제 설명===

사진별로 추억 점수를 매기려고 합니다.

사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다.

이름 may kein kain
추억 점수 5 10 1

사진 속 사람의 추억 점수가 없다면 -> [0점]

 

 

그리워하는 사람의 이름을 담은 문자열 배열 name,  각 사람별 그리움 점수를 담은 정수 배열 yearning, 각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열 photo 가 매개변수로 주어집니다.

사진들의 추억 점수를   photo에 주어진 순서대로 배열에 담아 return 하는 solution함수를 완성해 주세요.

 


 🌟 T I P 🌟  : 배열을 사용하지 않는 이유.!

may kein kain
5 10 1

배열로 사람별 추억점수를 찾는다면, 배열을 처음부터 끝까지 돌면서 사진 속 인물과 같은 사람을 찾고, 그 사람의 추억 점수를 가져옵니다.

이 경우 사진 속 사람이 추억점수가 없다면 최악의 경우 계속 추억점수 배열을 매번 끝까지 찾을 수도 있습니다.

이 방법은 시간복잡도가 O(n)으로 효율성이 떨어집니다.

 

배열 말고 해시를 사용한다면?!

 

해시는 해시함수가 알아서 키에 해당하는 해시값을 매핑해 주고, 그 해시값에 저장된 value값을 가져와주기 때문에

연산 속도가 훨씬 빨라집니다.

이 방법은 시간복잡도가 O(1)로 가장 빠릅니다.

 

 

 

🔖  풀이과정  

1. <key=인물, value=추억점수>를 담을 HashMap을 만들어주고, 그 안에 주어진 name, yearning 값을 넣어줍니다.

HashMap<String,Integer> score = new HashMap<>();//인물-추억점수

for(int i=0;i<name.length;i++) score.put(name[i],yearning[i]);

 

 

2. 사진을 하나씩 가져와서 그 사진의 추억점수의 합을 저장할 변수를 만들어 줍니다.

for(int i=0;i<photo.length;i++){
    int s=0;//i번째 사진의 추억점수의 합

 

 

3. i번째 사진의 인물을 한 명씩 보고 HashMap에서 해당 인물이 있는지 확인하고, 있다면 그 인물의 추억점수를 가져와 해당 사진의 추억점수 합에 저장해 줍니다.

for(int j=0;j<photo[i].length;j++){
	//i번째 사진 -> j번째 인물이 추억점수를 가지는지 확인
    if(score.containsKey(photo[i][j]))
        s+=score.get(photo[i][j]); //현재 인물이 추억점수를 가진다면, 그 점수를 s에 저장.
}

 

<---더 좋은 방법--->

Map의 getOrDefault라는 메서드를 사용하면 훨씬 간편하고 간결해집니다.

map.getOrDefault(key,0);

//map에 key가 있다면 -> 그 key의 value 값 반환
//      key가 없다면 -> default값인 0 반환 (default값은 내가 설정할 수 있습니다!)

 

score에 photo [i][j]가 있다면 -> 그 value값을 반환,     없다면 -> default값=0 반환! 

s+=score.getOrDefault(photo[i][j],0);

 

 

4. i 번째 사진의 추억점수의 합을 answer배열에 넣어주고, photo를 모두 조사하였으면 answer 배열을 반환해 줍니다.

    answer[i]=s; // i번째 사진의 추억점수의 합을 answer에 넣기
    }
    
return answer;

전체 코드

import java.util.*;
class Solution {
    public int[] solution(String[] name, int[] yearning, String[][] photo) {
        int[] answer = new int[photo.length];
        
        HashMap<String,Integer> score = new HashMap<>();//인물-추억점수
        for(int i=0;i<name.length;i++) score.put(name[i],yearning[i]);
        
        for(int i=0;i<photo.length;i++){
            int s=0;//i번째 사진의 총 추억점수
            for(int j=0;j<photo[i].length;j++){
                //i번째 사진 -> j번째 인물이 추억점수를 가지는지 확인.
                if(score.containsKey(photo[i][j])) //O(1)
                    s+=score.get(photo[i][j]); //O(1)
            }
            answer[i]=s;//i번째 사진의 총 추억점수 answer에 넣기.
        }
        return answer;
    }
}

시간복잡도: O(n)
공간복잡도: O(n)

'Algorithms(CT) > Programmers' 카테고리의 다른 글

[프로그래머스] Lv2 숫자 블록 (Java)  (0) 2023.09.05
[프로그래머스] Lv2 광물 캐기 (Java)  (0) 2023.09.04
[프로그래머스] Lv1. 달리기 경주 (Java)  (0) 2023.08.21
[프로그래머스] Lv.2 혼자 놀기의 달인 (Java)  (0) 2023.08.04
[프로그래머스] Lv.2 미로 탈출 (Java)  (0) 2023.08.02
'Algorithms(CT)/Programmers' 카테고리의 다른 글
  • [프로그래머스] Lv2 숫자 블록 (Java)
  • [프로그래머스] Lv2 광물 캐기 (Java)
  • [프로그래머스] Lv1. 달리기 경주 (Java)
  • [프로그래머스] Lv.2 혼자 놀기의 달인 (Java)
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    BFS
    제대로 파는 자바스크립트
    java
    스택
    lv2
    백준
    Greedy
    노마드코더
    DP
    Lv.1
    개발자북클럽
    구름톤 챌린지
    호텔 대실
    IT 5분 잡학사전
    IT 잡학사전
    LV.2
    프로그래머스
    인프런
    존안님
    HTML
    그리디
    따라하며 배우는 html css
    Til
    구름
    코딩테스트
    BOJ
    자바
    DFS
    lv.4
    LV.3
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[프로그래머스] Lv.1 추억 점수 (Java)
상단으로

티스토리툴바