[프로그래머스] 1단계_체육복 (python) (더 공부하기)

juyeon·2022년 6월 15일
0

코딩테스트(python)

목록 보기
10/22

프로그래머스

1단계_체육복

나의 풀이

  1. 실패
def solution(n, lost, reserve):
    answer = 0
    plus_one = []
    
    for i in range(n):
        if len(lost) < n or len(reserve) < n :
            plus_one = reserve.index(lost[i] + 1 or lost[i] - 1)
            lost.remove(lost[i])
            reserve.remove(plus_one)
            answer = n - len(lost)
        elif len(lost) == n:
            answer = 0
        else len(reserve) == n:
            answer = n
    
    return answer

: 음..너무 복잡하긴 하다

  1. 실패
def solution(n, lost, reserve):
    answer = 0
    
    lost_list = list(set(lost) - set(reserve))
    reserve_list = list(set(reserve) - set(lost))
    #여벌 체육복 가져온 학생이 체육복을 도난당한 경우 제거(중복 제거)
    
    for i in lost_list:
        if i + 1 in reserve_list or i - 1 in reserve_list:
            lost_list.remove(i)
            
    if len(lost_list) == 0:
        answer = n
    else:
        answer = n - len(lost_list)    
    
    return answer

: 제출 결과 반은 성공, 반은 실패. 뭐가..문제지..?

  1. 실패
def solution(n, lost, reserve):
    answer = 0
    
    lost_list = list(set(lost) - set(reserve))
    reserve_list = list(set(reserve) - set(lost))
    #여벌 체육복 가져온 학생이 체육복을 도난당한 경우 제거(중복 제거)
    
    for i in reserve_list:
        if i + 1 in lost_list:
            reserve_list.remove(i)
            lost_list.remove(i + 1)
        elif i - 1 in lost_list:
            reserve_list.remove(i)
            lost_list.remove(i - 1)
        
        answer = n - len(lost_list)    
    
    return answer

: 2번보다 나아졌다고 생각했는데... 실패해버렸다ㅠㅠ
완벽하다고 생각했는데, 뭐가 문제지..?

  1. 실패
def solution(n, lost, reserve):
    answer = 0
    
    lost_list = list(set(lost) - set(reserve))
    reserve_list = list(set(reserve) - set(lost))
    #여벌 체육복 가져온 학생이 체육복을 도난당한 경우 제거(중복 제거)
    
    for i in reserve_list:
        if i - 1 in lost_list:
            lost_list.remove(i - 1)
        elif i + 1 in lost_list:
            lost_list.remove(i + 1)
        
        answer = n - len(lost_list)    
    
    return answer

: 만약 [2, 4][3, 5]가 있다면, 3번의 경우 3-> 4가 되고, 2와 5가 남아서 실패하기 때문에. i - 1을 먼저 테스트 하는게 나을거 같아서 바꿈.
근데... 테스트 결과, 10개 중 2개 빼고 성공..아니 2개는 왜 실패냐고 으아아아
으아아아아아

결국 실패.
구글링 하면서 얻은 코드 입력해서...풀고..
다른 사람 풀이를 보았다ㅠ

다른 사람 풀이

def solution(n, lost, reserve):
    _reserve = [r for r in reserve if r not in lost]
    _lost = [l for l in lost if l not in reserve]
    for r in _reserve:
        f = r - 1
        b = r + 1
        if f in _lost:
            _lost.remove(f)
        elif b in _lost:
            _lost.remove(b)
    return n - len(_lost)

이걸 풀어서 쓰면..

def solution(n, lost, reserve):
    _reserve = []
    _lost = []
    
    for r in reserve:
    	if r not in lost:
        	_reserve.append(r)

    for l in lost:
    	if l not in reserve:
        	_lost.append(l)
    
    for r in _reserve:
        f = r - 1
        b = r + 1
        if f in _lost:
            _lost.remove(f)
        elif b in _lost:
            _lost.remove(b)
    return n - len(_lost)

: 테스트케이스가 추가돼서 그런지 이 코드는 18, 20 케이스를 통과하지 못합니다
-> 정렬하면 해결 된다는데... 정렬하는 법은 공부해서 덧붙이자ㅠ

for문, if문 한줄로 쓰기

: https://velog.io/@juyeonma9/조각-문법-for-python

profile
내 인생의 주연

0개의 댓글