자바 Java/프로그래머스

[프로그래머스] 체육복

꿈꾸me 2022. 3. 15. 17:31
728x90

프로그래머스 '체육복' 풀이

 

문제 ) 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.

  • 전체 학생의 수는 2명 이상 30명 이하입니다.
  • 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
  • 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

 

나의 풀이 )  더보기란에 부가설명 있습니다!

더보기

1. 저는 체육복을 잃어버린 번호 순서대로 확인해줄 거라 먼저 lost 배열을 오름차순으로 정렬해주었습니다.

2. reserve 배열은 여분의 체육복을 한 명에게 빌려주면 이제 그 학생은 다른 학생에게 체육복을 빌려줄 수 없으므로, 한 번 빌려주면 바로 없애주기 위해 ArrayList로 다시 만들어주었습니다.

더보기

3. 여분의 체육복이 있는 학생도 체육복을 도난 당할 수 있기 때문에, 여분의 체육복을 빌려주기 전에 자신의 체육복이 도난되었는지 확인하고 도난되었다면 ArrayList able에서 자신의 번호를 제거해줍니다. 또한 lost배열에서 자신의 인덱스 값도 0으로 바꿔줍니다.(다음 단계를 위하여)

더보기

4. 이제 for문과 if문을 이용하여 lost 배열에 속해 있는 번호의 학생이 자신의 앞이나 뒤 번호 학생에게 여분의 체육복을 빌릴 수 있는지 확인하고 빌릴 수 있다면 answer에 1씩 더해줍니다.

   이때, 값이 0인 번호는 자신의 여분 체육복으로 해결한 학생이므로 continue를 이용해 뒤 코드를 생략해줍니다.

   (.contains() 함수는 ArrayList에 해당 값이 있는지 검색해주며, 있으면 true를, 없으면 false를 출력해줍니다. lost[i] 번호의 앞 뒤 번호가 ArrayList able에 존재하는지 확인하기 위해 사용했습니다.)

   (.remove() 함수는 ArrayList에서 특정 인덱스의 값을 제거해줍니다. 체육복을 빌려줬다면 더 이상 체육복을 빌려 줄 수 없으니 ArrayList able에서 제거해주기 위해 사용했습니다.)

 

수정할 부분이 발견되거나 궁금한 점이 있으면 댓글 남겨주세요.

성장을 위한 댓글은 환영입니다 :)

728x90