- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77484

 

Level1이고, 스스로 푼 문제

 

1.

로직은 당첨 번호과 같은 숫자들의 갯수를 먼저 센다

이거는 correct 변수로 진행한다 

 

2.

2-1. 0의 갯수를 카운트 한 다음 0이 모두 당첨번호가 아닌 경우가 가능한 가장 낮은 등수일 것이고,

2-2. 0이 모두 당첨번호인 경우에 가능한 가장 높은 등수일 것이다. 

이 경우는 zeros 변수로 진행한다 

 

if문 만족하는 경우는 break 써서 해당 for문 나와야 한다. 안 그럼 틀린다!

처음에는 가장 높은 등수를 세는 건데, 만약 맞는 숫자와 0의 갯수의 합이 0이면 무조건 6등이므로, 이는 따로 조건 설정을 해준다 

 

같은 로직으로 가장 낮은 등수를 찾는다음 answer에 삽입한 후 반환하면 된다 

 

- 정답 풀이 :

def solution(lottos, win_nums):
    answer = []
    
    correct = 0
    zeros = 0
    for i in range(6):
        if lottos[i] in win_nums:
            correct += 1
        if lottos[i] == 0:
            zeros += 1
            
    first = correct + zeros
    for i in range(6,-1,-1):
        if i == 0:
            answer.append(6)
            break
        elif first == i :
            answer.append(7-i)
            break
            
    for i in range(6,-1,-1):
        if correct == 0:
            answer.append(6)
            break
        elif correct == i:
            answer.append(7-i)
            break
                
    return answer

- 문제 : 링크

 

Level1 문제이고, 스스로 푼 문제다!

문제 처음에 읽었을 때는 좀 복잡하다 생각했는데, 천천히 풀다보니 정답이 떴다. 걸린 시간은 30분 정도 

 

신고를 한 사람에 대해서 해당 사람에 의해 신고당한 사람들의 리스트를 가지고 있는 디렉토리(directory)가 필요하다고 생각했고,

신고를 당한 사람들에 대해서 그 사람을 신고한 사람들의 리스트를 가지고 있는 디렉토리(banned) 있어야 한다고 생각했다(신고 중복하지 않기 위해서와 총 신고 수를 계산해서 정지를 할지 말지 결정하기 위해서)

 

final은 banned에서 각 사람이 가지고 있는 리스트의 원소 갯수가 k개 이상인 사람들의 이름을 담아놓는 리스트이다. 

이 final 리스트와 directory의 각 key들의 리스트를 비교해서 해당 사람이 신고한 사람들 중 몇명이 정지를 받았는지 반환하는 로직을 생각했다 

 

주의 해야할 점은 신고를 한 사람 중에 정지 당한 사람 수를 셀 때 반복문 진행은 directory의 key로 진행하기 때문에 

answer의 인덱스와는 맞지 않는 다는 것이었다. 

그래서 따로 k 변수를 설정해준 후  answer의 인덱스에 맞춰서 값을 넣었다 

 

 k = 0        
    for i in directory.keys():
        count = 0        
        for j in final:
            if j in directory[i]:
                count += 1      
        answer[k] = count
        k += 1

 

 

- 정답 풀이: 

def solution(id_list, report, k):  
    directory = {}
    banned = {}
    n = len(id_list)
    m = len(report)
    answer = [0]*n
    final = []
    
    for i in range(n):
        directory[id_list[i]] = []
        banned[id_list[i]] = []
        
    for i in range(m):
        a,b = report[i].split()   
        #a가 신고한 b
        if b not in directory[a]: 
            directory[a].append(b)
        #b를 신고한 a, 정지당하는 사람 세려고            
        if a not in banned[b]:
            banned[b].append(a)
                    
    for name in banned.keys():
        if len(banned[name]) >= k :
            final.append(name)
    k = 0        
    for i in directory.keys():
        count = 0        
        for j in final:
            if j in directory[i]:
                count += 1      
        answer[k] = count
        k += 1 
    return answer

+ Recent posts