728x90
1차 시도 (오답)
def solution(n, lost, reserve):
answer = 0
# 공통된 원소 제거한 배열
valid_lost = [x for x in lost if x not in reserve]
valid_reserve = [x for x in reserve if x not in lost]
count = 0
for i, value in enumerate(valid_lost):
# 하나 큰 값 있는지, 하나 작은 값 있는지
if valid_lost[i] + 1 in valid_reserve:
valid_reserve.remove(valid_lost[i] + 1)
count += 1
elif valid_lost[i] - 1 in valid_reserve:
valid_reserve.remove(valid_lost[i] - 1)
count += 1
answer = n - len(valid_lost) + count
return answer
def solution(n, lost, reserve):
answer = 0
# 공통된 원소 제거한 배열 (여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다.)
valid_lost = [x for x in lost if x not in reserve]
valid_reserve = [x for x in reserve if x not in lost]
for i, value in enumerate(valid_reserve):
# 하나 큰 값 있는지, 하나 작은 값 있는지
if valid_reserve[i] + 1 in valid_lost:
valid_lost.remove(valid_reserve[i] + 1)
elif valid_reserve[i] - 1 in valid_lost:
valid_lost.remove(valid_reserve[i] - 1)
answer = n - len(valid_lost)
return answer
정답
def solution(n, lost, reserve):
answer = 0
# 공통된 원소 제거한 배열 (여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다.)
valid_lost = [x for x in lost if x not in reserve]
valid_reserve = [x for x in reserve if x not in lost]
valid_reserve.sort()
valid_lost.sort()
for i in valid_reserve:
front = i - 1
back = i + 1
if front in valid_lost:
valid_lost.remove(front)
elif back in valid_lost:
valid_lost.remove(back)
answer = n - len(valid_lost)
return answer
reserve.sort()는 필수적으로 해줘야하고 둘다 sort 해도 정답이다.
앞뒤 순서가 중요한 애들은 sort를 해주는 게 중요하다.
ref.
https://school.programmers.co.kr/learn/courses/30/lessons/42862
728x90