파이썬으로 알고리즘 문제를 푼지 이틀 된 사람의 풀이입니다
좋은 코드가 아닐 수 있음을 미리 밝힙니다 ^^*
는 사실 제한 사항을 제대로 이해하지 않은 채 풀게됩니다
lost 배열의 값보다 1이 작거나 1이 크면
reserve에서 해당되는 값을 지워주는 방식으로 접근을 했고
빌려주는 조건에 해당될 때마다, count하는 변수의 값도 1씩 증가시켜주었습니다
def solution(n, lost, reserve):
resultCount = 0
for i in lost:
for k in reserve:
if ((i-1 == k) or (i+1 == k)):
resultCount += 1
reserve.remove(k)
break
answer = n - (len(lost) - resultCount)
return answer
정답률 65%의 가슴 아픈 코드입니다 . . ..
안맞는 케이스들이 너무 많이 보여서
제한 사항을 꼼꼼하게 읽게 되었습니다
처음부터 잘 읽으면 얼마나 좋을까요 . . ?
잘 봐야할 부분은 "중복되는 번호는 없습니다." 부분과
"여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다." 부분인데요
첫 번째 부분을 만족 시키기 위해서
중복 되는 원소를 없애주는 set함수를 사용하였고,
두 번째 부분을 만족 시키기 위해서
lost배열과 reserve배열의 차집합을 구했습니다
def solution(n, lost, reserve):
resultCount = 0
lostUniq = set(lost) - set(reserve)
reserveUniq = set(reserve) - set(lost)
for i in lostUniq:
for k in reserveUniq:
if ((i-1 == k) or (i+1 == k)):
resultCount += 1
reserveUniq.remove(k)
break
answer = n - (len(lostUniq) - resultCount)
return answer
앞으로는 틀린 케이스가 있을 때마다 제한사항을 정말 꼼꼼하게 봐야겠음을 다짐했던 문제,,
저는 해당되는 값을 찾기위해서 반복문을 한 번 더 써줬는데 그럴 필요가 없다는 사실 .!
존재 확인 연산자라고 칭하는 친구를 사용해주었습니다
def solution(n, lost, reserve):
resultCount = 0
lostUniq = set(lost) - set(reserve)
reserveUniq = set(reserve) - set(lost)
for i in lostUniq:
if i-1 in reserveUniq:
resultCount += 1
reserveUniq.remove(i-1)
elif i+1 in reserveUniq:
resultCount += 1
reserveUniq.remove(i+1)
answer = n - (len(lostUniq) - resultCount)
return answer