본문 바로가기

매일 TIL

[내일배움캠프 6-4일] 신고 결과 받기, SQL 1주차

신고 결과 받기

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

def solution(id_list, report, k):
    # 중복되는 신고는 하나만 반영하기 위해 집합으로 변환 후, 다시 리스트로 변환
    report = list(set(report))

    # 해당 user가 누구를 신고했는지에 대한 report_dict
    report_dict = {user: [] for user in id_list}
    # 해당 user가 몇번 신고당했는지 저장하는 report_cnt
    report_cnt = {user: 0 for user in id_list}

우선 두개의 딕셔너리가 필요하다고 생각했다.

  • 내가 누구를 신고했는지 리스트 형태로 받는 딕셔너리 -> report_dict
  • 내가 몇 번 신고당했는지 저장하는 딕셔너리 -> report_cnt
for r in report:
    reporter, target = r.split()
    # 신고자는 key, 신고당한 사람은 해당 키의 value 리스트에 추가
    report_dict[reporter].append(target)
    # 신고당한 사람의 value에 +1
    report_cnt[target] += 1

신고한 사람, 당한 사람을 받아 각각의 딕셔너리에 넣어줌.

report_dict에는 신고한 사람(reporter)을 key로, 당한사람(target)을 value 리스트에 추가.

report_cnt에는 당한 사람(target)의 value인 횟수에 +1.

 

# 반환할 정답 answer 리스트 생성
answer = []

for i in id_list:
    # msg_cnt 초기화
    msg_cnt = 0
    # 신고당한 사람의 report_cnt를 체크
    for j in report_dict[i]:
        # k번 이상이라면 msg_cnt 1 증가
        if report_cnt[j] >= k:
            msg_cnt += 1
    answer.append(msg_cnt)

우선 msg_cnt를 초기화. 여기에 내가 받을 메시지의 수를 저장.

id_list를 돌면서 내가 신고한 사람들을 차례로 확인.

그 사람이 k번 이상 신고당했다면 내 msg_cnt에 +1

총 msg_cnt를 answers에 저장하면 끝.

이를 반복해주면 된다.

 

def solution(id_list, report, k):
    # 중복되는 신고는 하나만 반영하기 위해 집합으로 변환 후, 다시 리스트로 변환
    report = list(set(report))

    # 해당 user가 누구를 신고했는지에 대한 report_dict
    report_dict = {user: [] for user in id_list}
    # 해당 user가 몇번 신고당했는지 저장하는 report_cnt
    report_cnt = {user: 0 for user in id_list}

    for r in report:
        reporter, target = r.split()
        # 신고자는 key, 신고당한 사람은 해당 키의 value 리스트에 추가
        report_dict[reporter].append(target)
        # 신고당한 사람의 value에 +1
        report_cnt[target] += 1

    # 반환할 정답 answer 리스트 생성
    answer = []

    for i in id_list:
        # msg_cnt 초기화
        msg_cnt = 0
        # 신고당한 사람의 report_cnt를 체크
        for j in report_dict[i]:
            # k번 이상이라면 msg_cnt 1 증가
            if report_cnt[j] >= k:
                msg_cnt += 1
        answer.append(msg_cnt)

    return answer

최종 코드


SQL 1주차 과제

문제 : 상품 준비시간이 20~30분 사이인, 한국음식점의 식당명과 고객번호 조회하기

가져올 컬럼 : 식당명, 고객번호

어떤 테이블로부터 : food_orders

조건 : 상품 준비시간이 20 ~ 30분 사이 그리고 한국 음식점

select restaurant_name, customer_id

from food_orders

where food_preparation_time BETWEEN 20 and 30 and cuisine_type = 'Korean'


오늘의 회고

 

코드카타가 점점 힘들어진다. 오늘은 시간도 없어서 아침에 다 끝내지 못함.

그래도 오후에 골든벨하면서 환기도 되고 재미있었다.

SQL 이제 시작이다. 1주차 수업은 아는 내용을 주로 다루다보니 쉽게 느껴졌다. 근데 방심하면 안됨.

SQL은 어어 하다가 갑자기 복잡해진다. 탄탄하게 공부하자.

 

내일의 목표는 코드카타 + SQL 2주차 마무리 + CS 2회차 공부하기