문제

추억 점수


코드 설계

name, yearning을 일대일 매칭(딕셔너리 형태) 하여 각 이름에 대해 그리워 하는 햇수를 매칭한다
answer(result)의 원소의 갯수는 photo 2차원 배열의 row 갯수이다

def solution(name, yearning, photo):
    #name, yearning 일대일 매칭(딕셔너리)해서 이름에 대해 햇수 매칭
    infos={}
    n=len(name)
    for i in range(0,n):
        infos[i]=yearning[i]
    answer = [] #원소 수 = photo의 row 개수
    row,names=0
    for row in photo:
        for names in row:
            if name in photo[row]:
                answer.append(infos[row])
    return answer

틀린곳

  • 딕셔너리 key값을 선언할때 숫자로 선언함(문제 조건에 따르면 문자열:문자열)
  • row는 사진 1장, name은 이름 목록 전체 이므로 일대일로 비교 및 대응이 안됨
  • 사진별 합산이 아닌 사람별 append 구조라 결과 개수가 틀림
    - names 배열 안에 있는 사람 1명당 1개씩 추가 이므로 사진별 합산으로 변경해야함
    • 안쪽 루프에서는 더하기만, append는 바깥 루프로 빼기

주요 개념

zip() : 키와 값 한 쌍을 갖는 튜플을 요소로 갖는 객체로 딕셔너리 자료형 생성

정답코드

def solution(name, yearning, photo):
    infos = dict(zip(name,yearning))
    answer = []
    for p in photo:
        s=0
        for person in p:
            if person in infos:
                s+=infos[person]
        answer.append(s)
    return answer

복습 코드

def solution(name, yearning, photo):
    #이름과 그리움 정도를 딕셔너리로 하려 했으나 지금은 리스트로 인덱싱해도 동일
    score=[]
    answer = []
    tot=0
    for i in range(0,len(yearning)):
        score.append((name[i],yearning[i]))
        
    for j in range(len(photo)):
        tot=0 #photo[i]마다 초기화
        for k in range(len(score)):
            if(score[k][0] in photo[j]):
                tot+=score[k][1]
        answer.append(tot) #photo[i]마다 추가
    
    return answer

주의할점

  • for문 들여쓰기
profile
여기 초과학기가 확정되어 울면서 학교를 다니는 사람이 있습니다.

0개의 댓글