[Algorithm / 25.03.18] 추억 점수

2025. 3. 18. 10:07·Algorithm

 

1. 문제 설명

사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 다른 사진 속 인물의 이름이 ["kali", "mari", "don", "tony"]이고 ["kali", "mari", "don"]의 그리움 점수가 각각 [11점, 1점, 55점]]이고, "tony"는 그리움 점수가 없을 때, 이 사진의 추억 점수는 3명의 그리움 점수를 합한 67(11 + 1 + 55)점입니다.

 

그리워하는 사람의 이름을 담은 문자열 배열 name, 각 사람별 그리움 점수를 담은 정수 배열 yearning, 각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열 photo가 매개변수로 주어질 때, 사진들의 추억 점수를 photo에 주어진 순서대로 배열에 담아 return하는 solution 함수를 완성해주세요.

 

제한 사항

  • 3 <= name의 길이 = yearning의 길이 <= 100
    • 3 <= name의 원소의 길이 <= 7
    • name의 원소들은 알파벳 소문자로만 이루어져 있습니다.
    • name에는 중복된 값이 들어가지 않습니다.
    • 1 <= yearning[i] <= 100
    • yearning[i]는 i번째 사람의 그리움 점수입니다.
  • 3 <= photo의 길이 <= 100
    • 1 <= photo[i]의 길이 <= 100
    • 3 <= photo[i]의 원소(문자열)의 길이 <= 7
    • photo[i]의 원소들은 알파벳 소문자로만 이루어져 있습니다.
    • photo[i]의 원소들은 중복된 값이 들어가지 않습니다.

2. 내가 작성한 코드

import Foundation

func solution(_ name:[String], _ yearning:[Int], _ photo:[[String]]) -> [Int] {
    guard 3...100 ~= name.count else { return [] }
    
    func calculateYearning(_ photo: [String]) -> Int {
        var sum = 0
        
        name.enumerated().forEach { (index, element) in
            if photo.contains(element) {
                sum += yearning[index]
            }
        }
        
        return sum
    }
    
    let result = photo.map { calculateYearning($0) }
    
    return result
}

 

제한사항 부분이 유효성 검증을 하라고 만든 부분인지 잘 모르겠지만 저 첫번째 사항만 해두었다.

3...100의 범위 안에 있는지 검사하는데, 사실 이 조건에서 벗어난다면 nil을 참조해야 차질이 없을텐데 solution 반환값을 [Int]로 둠에 의문이 생겼다. 이러면 유효성 검증을 하라는건가..? 알아봐야 할 것 같다.

 

각 photo의 [String]배열마다 점수를 따로 계산할 수 있게 안에 function을 만들었다. calculateYearning 함수 내엔 주어진 name을 enumerated를 이용해 인덱스와 함께 사용해 photo 배열 내에 해당 요소가 있는지 검사 후 있다면 해당 인덱스를 그대로 가져다가 yearning에 같은 인덱스 값을 가져오도록 했다.

 

사실 어제 map, compactMap을 과제하면서 쓰게 되어서 이것밖에 생각이 나지 않았고 이를 쓰려면 단일 배열 대상으로 연산해줄 함수가 필요해서 위와 같은 풀이로 풀었다.

 


 

레벨 2, 3에서의 dfs를 이용하는건 아직 내가 dfs를 모르는 점도 있지만 사고가 끝까지 미치지 않아 따로 한문제씩 풀어보기로 한다..

레벨 1에서 찾아서 한 문제 풀었는데 손쉽게 푼다기보다 조금 생각해야 풀수 있는 점이 있는데, 아직 내 수준이 어느정도인지 모르니깐,,, 계속 한문제씩 풀어보는 습관을 들여보도록 한다

'Algorithm' 카테고리의 다른 글

[Algorithm / 25.04.04] 프로그래머스 - 피로도  (2) 2025.04.04
[Algorithm / 25.03.31] 프로그래머스 - 카펫  (0) 2025.03.31
[Algorithm / 25.03.21] 달리기 경주  (0) 2025.03.21
[Algorithm / 25.03.20] 카드 뭉치  (2) 2025.03.20
[TIL / 25.03.11] 숫자 야구 게임을 만들어보았소.  (1) 2025.03.11
'Algorithm' 카테고리의 다른 글
  • [Algorithm / 25.03.31] 프로그래머스 - 카펫
  • [Algorithm / 25.03.21] 달리기 경주
  • [Algorithm / 25.03.20] 카드 뭉치
  • [TIL / 25.03.11] 숫자 야구 게임을 만들어보았소.
subkyu-ios
subkyu-ios
subkyu-ios 님의 블로그 입니다.
  • subkyu-ios
    subkyu-ios 님의 블로그
    subkyu-ios
  • 전체
    오늘
    어제
    • 분류 전체보기 (47) N
      • iOS (31) N
        • Swift (31) N
      • 내일배움캠프 (7)
      • Git, Github (3)
      • Algorithm (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Wil
    트러블슈팅
    github
    ios
    stackview
    본캠프
    사전캠프
    algorithm
    프로그래머스
    회고
    KPT
    내일배움캠프
    협업
    알고리즘
    최적화
    UIKit
    tabman
    Swift
    TableView
    til
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
subkyu-ios
[Algorithm / 25.03.18] 추억 점수
상단으로

티스토리툴바