본문 바로가기
코딩테스트 문제풀이/Programmers

[KAKAO] 2019 KAKAO BLIND RERUITMENT

by merona99 2021. 7. 2.
반응형

2019 카카오 블라인드 코딩테스트

2021-07-02 & 2021-07-05    알고리즘스터디(오전10시~오후12시, 오후3시~오후5시)

 

카카오 공식해설

https://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/

 

2019 카카오 신입 공채 1차 코딩 테스트 문제 해설

작년에 이어 올해도 블라인드 전형으로 카카오 개발 신입 공채가 시작되었습니다! 그 첫 번째 관문으로 1차 온라인 코딩 테스트가 지난 9월 15일(토) 오후 2시부터 7시까지 5시간 동안 치러졌는데

tech.kakao.com

 

 

문제1) 오픈채팅방(★★)

풀이방식

배열딕셔너리를 사용해 매칭하여 출력함

 

  • 유저아이디와 닉네임을 각각 key, value값을 같는 딕셔너리 생성
  • 명령어와 유저아이디를 저장하는 배열 선언
  • record만큼 for문을 돌리고 Enter, Leave, Change에 따라 해당하는 딕셔너리와 배열에 저장하고 추가해줌
  • Enter의 경우에는 딕셔너리에 추가하고 배열에도 추가
  • Leave의 경우에는 배열에만 추가
  • Change의 경우에는 딕셔너리값만 변경 (해당 유저의 id값에 매칭되는 닉네임만 변경해주면 되므로)
  • 배열(execution)을 돌며 유저id에 맞는 닉네임을 출력해주며 answer에 추가

 

 

 

소스코드

 

def solution(record):
    answer = [] 
    user_dict = {}
    execution = []
    
    for rec in record:
        arr = rec.split()
        
        if arr[0] == 'Enter':
            user_dict[arr[1]] = arr[2]
            execution.append([arr[0],arr[1]])
        elif arr[0] == 'Leave':
            execution.append([arr[0],arr[1]])
        elif arr[0] == 'Change':
            user_dict[arr[1]] = arr[2]

    for exe in execution:
        if exe[0] == 'Enter':
            answer.append(user_dict[exe[1]] + '님이 들어왔습니다.')
        elif exe[0] == 'Leave':
            answer.append(user_dict[exe[1]] + '님이 나갔습니다.')
            
    return answer

 

 

 

 

 

문제2) 실패율(★)

풀이방식

각 stage마다 실패율을 계산후 튜플로 저장하여 내림차순으로 출력함

 

  • 스테이지별 실패율을 저장할 배열과 이용자수(users)를 선언
  • 1부터 n+1까지 반복문을 돌며 실패율(c/users)를 구하고 도달하였으나 클리어하지 못한 플레이어의 수(c)를 이용자수(users)에서 빼줌
  • 해당 stage와 실패율을 튜플로 배열(cnt)에 저장
  • 내림차순으로 정렬
  • 튜플의 stage번호를 result에 더한 후 출력

 

 

※ 주의할 점 ※

문제의 제한사항을 보면 '스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0으로 정의한다'가 있음

코딩을 할때 해당부분의 예외처리없이 실패율공식을 그대로 적용하는 경우,

소스코드를 제출했을때 몇몇부분에서 런타임에러가 나옴

따라서 예외처리를 해주어 스테이지 도달 유저가 없는경우 배열(cnt)에 0을 추가시켜주어야 함

 

 

 

소스코드

 

def solution(N, stages):
    cnt = []
    users = len(stages)

    for i in range(1,N+1):
        c = stages.count(i)      
        if c == 0:                    # 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0으로 정의한다.
            cnt.append((0, i))
        else:
            cnt.append((c/users, i))    # 튜플로 저장
            users -= c        

    result = []
    cnt = sorted(cnt, key=lambda x: -x[0])

    for i in range(len(cnt)):
        result.append(cnt[i][1])

    return result

 

 

 

 

 

문제3) 후보키(★★)

풀이방식

 

 

 

 

소스코드

 

반응형

댓글