[프로그래머스][level 1] 체육복

 

문제



주의할 점

 1. test case 12에서 실패하시는 분 : 문제 조건 중 밑 조건 생각
  • "여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다."
  • ex ) n=3, lost=[2,3], reserve=[3,4] 처럼 3을 기준으로 생각했을 때, 앞 뒤로 각각 잃어버린 사람, 여벌 있는 사람 존재하고, 본인은 여벌이 있으나 잃어 버린 경우

 2. test case 1~10에서 실패하시는 분 
  • lost, reserve는 오름차순 정렬되어서 들어온다는 말이 없다는 것을 염두에 두기
  • 즉, lost, reserve를 sort하면 해결될 것


해결 방법

 - lost, reserve 전체 고려해서 현재 가지고 있는 체육복 수 담은 배열 student 만들기
  • test case 12를 해결하는 근본적인 방법
  • ex ) 
                   n=5, lost = [2,3], reserve = [3,4]
                    -> student = [1, 0, 1, 2, 1]

 - 체육복 개수 0인 학생을 중심으로 앞, 뒤로 체육복 2개 가지고 있는지 확인


코드


고치기 전의 코드 

문제점 
  • lost와 reserve를 앞에서 부터 검사해서 체육복 가진 사람 검사함
  • 따라서, lost, reserve가 오름차순으로 들어오지 않을 것을 대비해서 sort해야 했음
  • 해결 : for(int i : lost) student[i]--; 처럼 n명 전체 볼 필요 없이 없는 사람 수만큼만 뺌

댓글 쓰기

0 댓글