Data Analyst KIM

[코딩 동아리] 23.08.21 - Lv1.신고결과받기 & 키패드 누르기 본문

일상/Coding Club

[코딩 동아리] 23.08.21 - Lv1.신고결과받기 & 키패드 누르기

김두연 2023. 8. 21. 23:32
반응형

 

<문제>

: 신고결과받기(정답률 36%)

 

<문제 접근 방식>

처음에는 문제를 그대로 따라가면서 다음과 같은 코드를 작성했다.

def solution(id_list, report, k):
    answer = [0]*len(id_list)
    count= [0]*len(id_list)
    lst = [] 
    kkk = []
    for i in range(len(report)) :
        a = report[i].split(' ')
        if a not in lst :   # 동일한 유저ID와 유저가 신고한 ID가 동일하면 삭제
            lst.append(a)
    
    for i in range(len(lst)):   # 신고당한 횟수를 계산
        for v in range(len(id_list)) :
            if lst[i][1] == id_list[v] :
                count[v] += 1
            else :
                pass
    
    for a,b in zip(count,id_list):
        if a >=2 :
            kkk.append(b)
    
    for i in range(len(lst)):
        if lst[i][1] in kkk :
            idx = id_list.index(lst[i][0])
            answer[idx] += 1
    return answer

하지만 예시 테스트는 2개 모두 통과 / but 제출시 시간초과 + 틀림

 

위에 코드를 모두 줄여서 다음과 같은 코드를 작성했다.

 

1. id_list에게 메일을 보내는 횟수를 나타낼 리스트를 만들자 => answer
2. 신고 횟수를 누적하는 방을 딕셔너리를 만들자 => report_all
3. report에 중복되는 값을 제거하자 => set(report)
4. 중복되지 않는 report를 split하고 1번 인데스의 값을 신고 횟수 누적하는 딕셔너리에 누적하자.
5. 딕셔너리에 누적된 값이 k보다 크거나 같으면 
6. report를 split한 0번째 인덱스의 값이 id_list에 해당하는 리스트의 인덱스에 메일을 보내는 횟수의 리스트(answer)에 1을 더해라

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    report_all = {i : 0 for i in id_list}
    
    for i in set(report):
        report_all[i.split(' ')[1]] += 1
        
    for i in set(report):
        if report_all[i.split(' ')[1]] >= k :
            answer[id_list.index(i.split(' ')[0])] += 1
    
    return answer

 

{다른 사람 접근법 및 코드}

 

<순범 코드>

def solution(id_list, report, k):
    score = [0] * len(id_list)  # 신고받은 횟수
    report = list(set(report))  # 중복제거

    # 신고 받은 횟수 구하기
    for i in report:
        score[id_list.index(i.split(' ')[1])] += 1

    bad_people = []  # 정지 받을 사람 명단

    # 신고받은 횟수가 k보다 크다면 정지받을 명단에 추가.
    for idx, num in enumerate(score):
        if num >= k:
            bad_people.append(id_list[idx])
            
    result = [0] * len(id_list)
    # 신고받은 사람이 정지받을 사람 명단에 있다면
    # 신고한 사람에게 메일 발송
    for value in report:
        if value.split(' ')[1] in bad_people:
            result[id_list.index(value.split(' ')[0])] += 1

    return result

 

<승호형 코드>

def solution(id_list, report, k):
    report = set(report)
    report = list(report)

    id_list_dict = {}
    for i in id_list:
        id_list_dict[i] = 0
    print(id_list_dict)
    for i in range(len(report)):
        id_list_dict[report[i].split()[1]] += 1
    return id_list_dict

<문제>

: 키패드 누르기(정답률 51%)

<내 코드>

def solution(numbers, hand):
    answer = ''  
    dic = {1: [0, 3], 2: [1, 3], 3: [2, 3],
           4: [0, 2], 5: [1, 2], 6: [2, 2],
           7: [0, 1], 8: [1, 1], 9: [2, 1],
          '*':[0, 0], 0: [1, 0], '#': [2, 0]}
    
    L_start = dic['*']
    R_start = dic['#']
    
    for i in numbers :
        now = dic[i]
        if i in [1,4,7] :
            answer += 'L'
            L_start = now
        elif i in [3,6,9] :
            answer += 'R'
            R_start = now
        elif i in [0,2,5,8] :
            # 좌표 거리 구하기
            L_dis = abs(L_start[0]-dic[i][0])+abs(L_start[1]-dic[i][1])
            R_dis = abs(R_start[0]-dic[0][0])+abs(R_start[1]-dic[i][1])
            
            # 왼손이 가까울 경우
            if L_dis < R_dis :
                answer += 'L'
                L_start = now
            
            elif L_dis > R_dis :
                answer += 'R'
                R_start = now 
            
            else :
                if hand == 'left' :
                    answer += 'L'
                    L_start = now
                else :
                    answer += 'R'
                    R_start = now
    return answer

 

다른 사람 코드도 모두 비슷했다. 오늘 발표를 하면서 2가지를 느꼈다.

내가 지금 사용하고 있는 함수에 대해서 정확하게 이해를 하지 못하고 있다는 점과 변수명 선정을 남들이 알아보기 힘들다는 점이다.

앞으로 공부 할 때는 정확하게 남들에게 전달을 해줄 수 있도록 함수에 대한 숙지를 할 것이고 변수명을 누가봐도 알 수 있도록, 즉 가독성이 좋도록 사용을 할 것이다!!

 

반응형

'일상 > Coding Club' 카테고리의 다른 글

[Coding Club] 2023.11.10  (0) 2023.11.13
[코딩 동아리] 23.08.11  (0) 2023.08.15
[Coding Club] 23.07.21(프로그래머스-과일 장수)  (0) 2023.07.23
[Coding Club] 23.07.14  (0) 2023.07.15
[Coding Club] 23.07.07  (0) 2023.07.07