기타:: 230207 일기

2023. 2. 8. 00:45·Problem Solving/문제풀이
반응형

프로그래머스 풀이

문제리뷰

2022 KAKAO BLIND RECRUITMENT

  1. 신고 결과 받기 : 파이썬 딕셔너리 활용해서 풀어봤는데 value 값을 딕셔너리형로 받아서 코딩하는 내가 헷갈렸다^^
    또한, 제한 사항, 문제 요구 사항을 제대로 읽고 파악해야 시간을 안 버릴거 같다.
    그리고 자료형을 id : {신고한 id : T/F} 로 표현했는데 신고한 사람을 리스트로 넣어도 될거 같다.
  2. 주차 요금 계산 : 차량 번호별 시간 값을 딕셔너리 형태로 만든 후, 총 시간 개수가 홀수이면 마지막에 23:59를 넣어 예외 처리를 따로 안 해도 계산 할 수 있도록 함.

문제 분석

  • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리
  • 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성
    • 처음에는 유저별 신고 횟수를 구하는걸로 잘못 이해해서 return함
  • key, value가 한 쌍인 자료구조 : 해쉬(파이썬에서는 딕셔너리)가 필요함

신고 결과 받기

초기 코드

check_list 구조 : {id : {id가 신고 때린 사람 : 신고를 때렸는지 아닌지 True/False}}
count_list 구조 : {id : 신고 받은 횟수}
answer 구조 : {id : 메일 보낸 자 카운팅}

def solution(id_list, report, k):
    temp = { id : False for id in id_list }
    check_list = { id : temp.copy() for id in id_list }

    # id : {신고한 id : T/F}
    for element in report:
        _from, to = element.split()
        check_list[_from][to] = True

    count_list = { id : 0 for id in id_list }
    for _from in id_list:
        cur = check_list[_from]
        for key, value in cur.items():
            if value: count_list[key] += 1

    answer = { id : 0 for id in id_list }
    for id in id_list:
        if count_list[id] >= k:
            for key, value in check_list.items():
                if value[id]:   answer[key] += 1

    answer = list(answer.values())

    return answer

강의 본 후 수정 풀이

굳이 T/F로 신고 때린 사람 관리하는 것보다 set으로 관리해서 중복을 없애면 되겠다고 생각했다.
-> 해설 강의를 보니 그냥 처음부터 report를 set 처리하면 더 간단하다(머쓱)
check_list 구조 : {id : set(신고 때린 사람)}
count_list 구조 : {id : 신고 받은 횟수}
answer 구조 : [id 순서대로 mail 보낸 횟수]

def solution(id_list, report, k):
    check_list = { id : set() for id in id_list }

    for element in report:
        _from, to = element.split()
        check_list[_from].add(to)

    count_list = { id : 0 for id in id_list }
    for _from in id_list:
        cur = check_list[_from]
        for stop_name in cur:
            count_list[stop_name] += 1

    # check_list : { id : [신고한 사람] }
    # count_list : { id : 신고 횟수}
    # answer     : { id 순으로 메일 횟수 }
    answer = []

    for name in id_list:
        mail = 0
        for user in check_list[name]:
            if count_list[user] >= k:
                mail += 1
        answer.append(mail)

    return answer

주차 요금 계산

초기 코드

  1. 차량번호별 시간 구하기
  2. 시간 값을 분으로 바꾼 후 전체 요금 구하기
from collections import defaultdict
    import math
    

def solution(fees, records):  
btime, bfee, utime, ufee = fees

# 차량번호 : [시간]
totalTimes = defaultdict(list)
for record in records:
    time, number, state = record.split(' ')
    totalTimes[number].append(time)

totalTimes = sorted(totalTimes.items())

# 전체 요금 계산
answer = []
for key, values in totalTimes:
    if(len(values) % 2 == 1): values.append('23:59')

    total = bfee
    totalTime = 0
    for idx in range(0, len(values), 2):
        inTime = values[idx].split(":")
        inTime = int(inTime[0]) * 60 + int(inTime[1])
        outTime = values[idx + 1].split(":")
        outTime = int(outTime[0]) * 60 + int(outTime[1])

        totalTime += outTime - inTime
    if(totalTime >= btime):
        total += math.ceil((totalTime - btime) / utime) * ufee

    answer.append(total)

return answer

강의 본 후 참고 사항

강의에서는 차량 번호를 배열 인덱스로 사용하고 inTime, 들어오고 나갔는지 여부, 누적 시간을 배열로 만들어서 관리했다.
내 풀이가 더 간단한거 같아서 강의만 참고했다.

반응형

'Problem Solving > 문제풀이' 카테고리의 다른 글

기타:: 230211 일기  (0) 2023.02.11
기타:: 230208 일기  (0) 2023.02.09
기타:: 230131 일기  (0) 2023.01.31
기타:: 230124 일기  (0) 2023.01.24
기타:: 230118 일기  (0) 2023.01.18
'Problem Solving/문제풀이' 카테고리의 다른 글
  • 기타:: 230211 일기
  • 기타:: 230208 일기
  • 기타:: 230131 일기
  • 기타:: 230124 일기
나귀당
나귀당
게임 클라이언트 개발자의 개인 블로그 (기술, 개발일지, 성찰)
  • 나귀당
    나귀라 카더라
    나귀당
    • 분류 전체보기 (169)
      • 개발 (26)
        • 게임 (9)
        • 서브 (9)
        • 기타 (8)
      • Computer Science (20)
        • 머신러닝 (5)
        • 정보보안 (6)
        • 컴퓨터비전 (8)
        • 컴퓨터그래픽스 (1)
      • Problem Solving (52)
        • 이론 (17)
        • 문제풀이 (32)
        • 기타 (3)
      • 개인 (56)
        • Careers (1)
        • 회고+계획 (34)
        • 후기 (14)
        • 좌충우돌 (2)
        • 독서 (5)
      • 학교 (업뎃X) (15)
        • 과제 (2)
        • 수업관련 (9)
  • 반응형
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
나귀당
기타:: 230207 일기
상단으로

티스토리툴바