programmers- lv.1 (신고 결과 받기)

이예송·2023년 7월 20일

PS

목록 보기
54/97

문제링크: 신고 결과 받기

✍🏻 Information

content
언어python
난이도⭐️⭐️
풀이시간16분
제출횟수2
인터넷검색유무yes




🍒 My Code

def solution(id_list, report, k):
    answer = [0 for i in range(len(id_list))]
    singo = [[0 for j in range(len(id_list))] for i in range(len(id_list))]
    for r in report:
        FROM = id_list.index(r.split()[0])
        TO = id_list.index(r.split()[1])
        if singo[TO][FROM]==0:
            singo[TO][FROM]=1
    
    for i in range(len(singo)):
        if sum(singo[i])>=k:
            for j in range(len(singo)):
                if singo[i][j]==1:
                    answer[j]+=1
    return answer




💡 What I learned

  • 검색한 내용) 2차원 리스트 초기화
    : [[0 for j in range(cols)] for i in range(rows)]
  • 2차원 리스트 초기화시에 주의해야할점 : a = [[0]*n]*n]와 같이 초기화해주게되면 리스트를 초기화시킬 때 모든 행이 같은 객체로 인식되기 때문에(n개의 [0]*n이 모두 같은 객체로 인식됨)a[1][1] 값만 변화시켜도 1열의 값이 모두 변한다.
  • 두번째 for문에서 sum이 k이상일때 for문 한번 더 돌리는게 맘에 안들긴한데 좋다고 생각한 풀이에서도 .index는 시간복잡도가 O(N)이라 저 풀이 또한 이중 for문이나 마찬가지긴하다.
    1) [[0]*cols for _ in range(rows)]
    2) [[0 for j in range(cols)] for i in range(rows)]
    위 두 방법을 사용해서 초기화해주는 것이 좋다.
  • 좋다고 생각한 풀이
def solution(id_list, report, k):
    answer = [0] * len(id_list)    
    reports = {x : 0 for x in id_list}

    for r in set(report):
        reports[r.split()[1]] += 1

    for r in set(report):
        if reports[r.split()[1]] >= k:
            answer[id_list.index(r.split()[0])] += 1

    return answer
-> set으로 중복 없앤것 good
-> 이중 list가 아닌 1차원 딕셔너리로 처리
def solution(id_list, report, k):
    report_list = []
    answer = [0 for _ in range(len(id_list))]
    singo = [[0]*len(id_list) for _ in range(len(id_list))]
    
    for i in report:
        report_list.append(i.split())
    
    for i in report_list:
        singo[id_list.index(i[1])][id_list.index(i[0])]+=1

    for i in singo:
        count = 0
        maybe = []
        cnt = 0
        for j in i:
            if j !=0 :
                count=count+1
                maybe.append(cnt)
            cnt=cnt+1
        if count>=k:
            for p in maybe:
                answer[p] = answer[p]+1

    return answer

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

정말 유익한 글이었습니다.

답글 달기