[프로그래머스] Lv1 체육복

changi123·2023년 8월 20일
0
post-thumbnail

문제설명

해결방안

(1) 여분이 있는 학생의 앞번호와 뒷번호를 구해서 빌려줄 수 있는 학생이면 카운트 더하자

코드

import java.util.*;
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
			int answer = 0;
		List Llist = new ArrayList();
		for(int i=0; i< lost.length;i++) {
			Llist.add(lost[i]);
			Llist.sort(null);
		}
		List Rlist = new ArrayList();
		for(int i=0; i< reserve.length;i++) {
			
			Rlist.add(reserve[i]);
			Rlist.sort(null);
		}

		for(int i= 0; i<reserve.length;i++) {

			for(int j= 0; j<lost.length;j++) {
				if(reserve[i] == lost[j]) {
					Rlist.remove(Rlist.indexOf(reserve[i]) );
					Llist.remove(Llist.indexOf(lost[j]));
					break;
				}
			}
		}

		int all = n - Llist.size();

		for(int i= 0; i<Rlist.size();i++) {



			int front = (int)Rlist.get(i)-1;
			int back = (int)Rlist.get(i)+1;
			for(int j =0; j<Llist.size();j++) {
				if(Llist.contains(front)){
					all +=1;
					Llist.remove(Llist.indexOf(front));
					break;
				} else if(Llist.contains(back)) {
					all +=1;
					Llist.remove(Llist.indexOf(back));
					break;
				}
			}
		}
		answer = all;
		return answer ;

    }
}

내 코드 설명

(1) 각 배열 두 개를 리스트에 추가하여 오름차순 정렬해준다.
(2) 여분의 학생 앞 뒷 번호를 구해 분실 학생의 번호가 있다면 수업을 들을 수 있는 학생의 수를 증가시키자.

다른 사람 풀이

다른 사람 코드 설명

느낀점

처음 풀었을 때

  • 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

이 조건을 아예 고려하지 않고 풀었다가 한참을 헤맸다..
근데 이 조건을 고려해도 18번, 20번 케이스가 오류가 떠서 힌트를 봤더니 추가한 리스트를 오름차순 하여 해보라길래 했더니 성공했다. 이유를 생각해보니 만약 n = 5, 분실 = [2,4], 여분 = [3,1] 이렇게 있을 시 오름차순을 하지 않으면 3번 학생이 2번 학생을 빌려주고 난 후 1번 학생은 4번 학생을 빌려줄 수 없기 때문이었다. 오름차순 후 해준다면 분실 = [2,4], 여분 = [1,3] 이므로 1번 학생이 2번 학생을 빌려줄수도 있고 3번 학생이 4번 학생을 빌려줄 수 있다는걸 알았다. 많이 풀어보자!

profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보