반응형
2019 카카오 블라인드 코딩테스트
2021-07-02 & 2021-07-05 알고리즘스터디(오전10시~오후12시, 오후3시~오후5시)
카카오 공식해설
https://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/
문제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) 후보키(★★)
풀이방식
소스코드
반응형
'코딩테스트 문제풀이 > Programmers' 카테고리의 다른 글
[프로그래머스] 파괴되지 않은 건물 (0) | 2023.05.09 |
---|---|
[프로그래머스] 전화번호 목록 (0) | 2021.08.27 |
[KAKA0] 2020 KAKAO BLIND RERUITMENT (0) | 2021.08.16 |
[KAKAO] 2021 KAKAO 채용연계형 인턴십 (0) | 2021.07.20 |
[KAKAO] 2020 카카오 인턴십 (0) | 2021.06.26 |
댓글