본문 바로가기
  • ̀⁽ᵕ̈⁾ ́
algorithms

[level1] 결과 받기

by j2j2y 2022. 1. 16.

level 1의 첫 문제는 다음과 같았다.

 

간단하게 이해한 바로는,

 

id_list : 이용자의 ID가 담긴 문자열 배열, report : 신고당한 이용자의 ID 가 담긴 문자열 배열, k: 정지 기준이 되는 신고 횟수, return : 처리결과메일을 받은 횟수였고

제공된 함수를 완성시켜서 리턴값을 보내주어야하는 문제였다.

 

생각해낸 풀이 방법

 

진짜 쥐어짜낸 방법이긴 했지만

 

입출력값 형태

우선 id_list의 길이를 파악하여 사람 수를 활용하였다.

report에서 받아오는 값에서는 .split() 함수를 사용하여 한 문자열에서 첫번째 배열 값이 신고한 사람이고 두번째 배열 값이 신고 당한 사람이라는 것을 저장하여 활용하였다. 

 

tmp는 이중리스트를 만든 것이다.

 

[Python] 길이가 정해진 리스트 만들기

파이썬에서 리스트를 생성할 때는 그저 아래와 같이 작성하면 쉽게 리스트가 생성이 된다. list = [] 리스트 길이를 지정하고 0으로 초기화 하고 싶다면 다음과 같이 작성하면 된다. list = [0 for i in

jobc.tistory.com

위의 블로그 방법을 참고하였다.

 

tmp에서는 그림으로 표현하면 다음과 같다.

누가 어떤 사람을 선택했는지 카운트해서 기록하고자 했다. 

 

tmp2에서는 tmp에서 구했던 배열을 활용하여 열의 값을 합한 결과를 저장했다.

그러면 이제 각각의 사람들이 몇번 신고를 당한지 파악할 수 있으니까..!

 

email이라는 리스트는 신고가 접수되었다는 메일을 받는 갯수를 기록해둔 리스트이다.

 

tmp2를 만드는 것 까지는 별 문제가 없었다.

다만 email 갯수를 구할 때 너무 하드코딩으로 해버린 느낌이라 다소 아쉽긴 하다.

 

tmp를 만든 후  한사람이 같은 사람을 여러번 신고할 경우 한번으로 간주해야하기에

1보다 큰 값의 경우에는 다 1로 수정시켜주었고,

tmp2의 값이 1보다 같거나 큰 경우는 tmp에서 해당 위치에 신고를 한 사람들을 파악해서

email 리스트에 값을 카운팅시켜주었다.

 

그런 후, 제일 마지막엔

리턴값으로 보내줘야할 email을 answer로 보내주었다.

def solution(id_list, report, k):
    answer = []
    
    id_num = len(id_list)
    
    #신고한 사람의 이름을 append시켜서 저장해두고, 같은 이름이면 어짜피 중복 제거되니까 총 수를 리턴
    tmp = [[0 for col in range(id_num)] for row in range(id_num)]
    #즉 tmp는 전체 경우의 수
    
    #tmp2는 각각의 신고 당한 수 합
    tmp2 = [0 for j in range(id_num)]
    
    email = [0 for j in range(id_num)]
    
    for j in report:
        value = j.split()
        tmp[id_list.index(value[0])][id_list.index(value[1])] += 1
    
    for j in range(id_num):
        for u in range(id_num):
            if tmp[j][u] > 1:
                tmp[j][u] = 1
            
    for j in range(id_num):
        for h in range(id_num):
            tmp2[j] += tmp[h][j]
    for j in range(id_num):
        if tmp2[j] >= k:
            for u in range(id_num):
                if tmp[u][j] != 0:
                    email[u] += 1
            
   
    answer = email
        
    
    return answer

쉽지만 재밌었다.

 

파이썬 문법을 다 까먹어서

하나하나 찾아가면서 하느라 시간이 다소 걸렸지만 ^^

 

 

다른 사람들은 어떻게 했는지 한번 확인해봐야겠다

 

[추가]

다른 사람들 코드를 한번 살펴보니

딕셔너리를 활용하여 간단하게 풀었다. 

딕셔너리.. 기억하자

'algorithms' 카테고리의 다른 글

2020.09.27 4주차 백준문제  (0) 2020.09.27
2020.07.02 PS 문제 (2)  (0) 2020.07.02
2020.07.02 PS 문제 (1)  (0) 2020.07.02

댓글