카테고리 없음
[프로그래머스][Lv.1][해시] 완주하지 못한 선수*
포시
2023. 1. 17. 23:48
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 오답 풀이
정확성 쪽으론 맞지만 효율성 즉, 입력되는 데이터가 많을 경우 걸리는 시간이 길어져 결국 오답 처리된 코드들이다.
def solution(participant, completion):
for x in completion:
participant.remove(x)
return participant[0]
def solution(participant, completion):
for x in participant:
if x in completion:
completion.remove(x)
else:
return x
def solution(participant, completion):
participant.sort()
completion.sort()
print(participant, completion)
for i, e in enumerate(participant):
try:
if e != completion[i]:
return participant[i]
except:
return participant[-1]
이 풀이도 원래 정답인데 중간에 print문이 있어서 안된거였다 ㅠ
내 정답 풀이
def solution(participant, completion):
dict = {}
for x in participant:
if x in dict:
dict[x] += 1
else:
dict[x] = 1
for y in completion:
if dict[y] > 1:
dict[y] -= 1
else:
del dict[y]
for result in dict.keys():
return result
해시 문제라는 점에서 힌트를 얻어
예전에 Python에서 dict를 해시 대신 사용할 수 있다는 생각과
해시 공부하며 정리한 글에 도움을 받아 코드를 작성하니 정확성, 효율성 모두 정답 처리가 나왔다.
나중에 다시 안보고도 바로 풀 수 있게 메모해놔야겠다.
다른 풀이 A
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[-1]
그나마 내가 푼 코드와 비슷해서 가져왔는데 살짝 달라 메모
다른 풀이 B
def solution(participant, completion):
answer = ''
temp = 0
dic = {}
for part in participant:
dic[hash(part)] = part
temp += int(hash(part))
for com in completion:
temp -= hash(com)
answer = dic[temp]
return answer
이 풀이가 제일 문제 출저 의도와 맞지 않을까 싶다.
각 participant들의 hash값을 dict에 넣은 후
temp로 수의 가감을 이용해 마지막 남는 하나의 값을 찾아내는 방식.
Python의 Collection과 Counter를 이용한 방법은 문제 출제 의도와 다른거 같아 생략
728x90