일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 스택
- 코딩테스트
- 코테
- 패캠챌린지
- 딥러닝 바이블 후기
- 삼성
- 백준 23289
- 백준 학교 탐방하기
- 직장인자기계발
- 백준
- 파이썬 기초부터 시작하는 딥러닝 영상인식 바이블 Online 강의
- Python
- 해쉬
- 온풍기 안녕!
- 백트래킹
- 문자열
- MST
- 백준 9019
- 최단거리
- 그리디
- 파이썬 기초부터 시작하는 딥러닝 영상인식 바이블 Online 강의 후기
- 직장인인강
- 백준 3차원 막대기 연결하기
- 패스트캠퍼스후기
- 백준 19950
- 프로그래머스
- 삼성 코테
- 패스트캠퍼스
- 직장인인간
- 파이썬
- Today
- Total
programmingu
[프로그래머스][코딩연습/해시]완주하지 못한 선수 본문
programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
해시 연습이라고 하는데 해시는 개념만 알고 코드로 구현해 본 적은 없었다. 그래서 일단 내가 아는 방식으로 구현해 보았다.
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i]==completion[i]:
continue
else:
answer=participant[i]
return answer
answer = participant[len(completion)]
return answer
먼저 participant와 completion을 오름차순으로 정렬한 뒤 첫번째 요소부터 차례대로 같은지 확인한다.
다시보니
if participant[i]==completion[i]:
continue
else:
answer=participant[i]
이 부분을 if participant[i]!=completion[i]: 로 고치는 게 더 간단하게 쓸 수 있다.
하지만 이렇게 푸는 방식은 출제의도와 다르다고 생각했다.
def solution(participant, completion):
hash = {} # 딕셔너리 형식 key: 사람이름 value: 명수(참가자-완주자)
for part in participant:
if part in hash: # 참가자 이름이 hash의 key이다. key가 존재하면?
hash[part] += 1 # 동명이인이라고 생각하고 value를 한명 추가한다.
else:
hash[part] = 1 # key:part value:1로 추가한다.
for comp in completion:
if hash[comp] == 1:
del hash[comp]
else:
hash[comp] -= 1
answer = list(hash.keys())[0] # 남은 key의 list를 출력하면 완주 못한 사람의 이름 리스트가 뜬다.
return answer
프로그래머스에서는 문제를 풀고 나서 모법답안을 추천 순으로 볼 수 있어서 좋다.
hash와 dict는 비슷하다고 생각한다.. 모범답안이 잘 이해가 안돼서 구글에 좀 찾아 보고 그걸 참조해서 코드를 구현했다. 그리고 주석에 이해할 수 있도록 설명을 추가했다. 참고한 블로그는 아래에 링크로 달겠다.
그런데 자료구조 및 알고리즘 수업에서 배운 hash랑은 이용하는 방법이 좀 달라서.. 더 생각해 보아야겠다.
참고: davinci-ai.tistory.com/32?category=905792 (감사합니다.)
'coding test practice' 카테고리의 다른 글
[프로그래머스][코딩연습/스택/큐]주식가격 (0) | 2021.01.09 |
---|---|
[프로그래머스][코딩연습/해쉬]전화번호 목록 (0) | 2021.01.09 |
[백준][코딩연습/동적계획법]#1003 피보나치 함수 (0) | 2021.01.09 |
[백준][코딩연습/백트래킹]#15652 N과 M(4) (0) | 2021.01.08 |
[백준][코딩공부/백트래킹]#15651 N과 M(3) (0) | 2021.01.08 |