programmers- lv.1 (체육복)

이예송·2023년 7월 11일

PS

목록 보기
20/97

문제링크: 체육복

✍🏻 Information

content
언어python
난이도⭐️⭐️(⭐️) -> 나 삽질했다..
풀이시간40분
제출횟수
인터넷검색유무yes




🍒 My Code

def solution(n, lost, reserve):
    answer = n - len(lost)
    lost.sort()
    reserve.sort()
    
    tmp = []
    for r in reserve:
        if r in lost:
            answer+=1
            tmp.append(r)
    for t in tmp:
        lost.remove(t)
        reserve.remove(t)
    
    for l in lost:        
        if l-1 in reserve:
            answer+=1
            reserve.remove(l-1)
        elif l+1 in reserve:
            answer+=1
            reserve.remove(l+1)
    return answer




💡 What I learned

  • 처음으로 질문하기 보고 힌트를 얻었다. '문제를 꼼꼼히 읽어야겠다'라는 교훈을 얻었다. 원래 꼼꼼히 읽는 편인데 문제를 풀다 보니 빨리 푸는 요령을 얻었다고 생각했는데 역시 꼼꼼함은 잊으면 안됐다,,,
    ㄴ> 내가 놓쳤던 부분은 "여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다." 이 부분이었다.
    ㄴ> 그리고 이 부분을 처리하면서 여러번 애먹었다. for문 하나에 l, l-1, l+1 한번에 처리하면 문제 생김, tmp 안만들어주고 if문에서 바로 remove하면 reserve를 for문으로 돌고 있어서 문제 생김 등..
  • list_name.remove(value): value를 list_name에서 제거함. 값으로 삭제. 해당 값을 모두 삭제해주는 것은 아니기 때문에 해당 value가 list_name에 여러개 있다면 for문으로 제거해주어야함.
for _ in list_name :
    list_name.remove(value)
  • 2,3번째 줄에서 if문의 조건을 만족하는 값(r)으로만 리스트를 새로 구성하는 것이 인상깊었던 다른 사람의 풀이
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)

0개의 댓글