-
[프로그래머스] 체육복 자바코딩테스트 2025. 4. 6. 10:21반응형
문제
전체 학생수 n, 체육복을 도난당한 학생 번호 배열 lost, 여벌 체육복을 갖고 있는 학생 번호 배열 reserve가 있다.
해당 정보를 바탕으로 체육수업에 참가할 수 있는 학생 수를 구하여라.
제한사항
1. 체육복은 자기 번호의 바로 앞 뒤 한테만 빌릴 수 있다..
2. 여벌 체육복을 가진 학생도 도난 당할 수 있다.
3. 보유 갯수가 1개면 빌려줄 수 없다.접근
우선 배열로 해당 정보를 관리하며, 초기에 모든 값에 1을 부여한다.
그 후 여벌 보유 학생들의 체육복 수를 + 1, 도난 당한 학생들의 체육복 수를 -1 처리.
마지막으로 answer에 체육복 수 >=1 인 학생 수를 계산하여 마무리public int solution(int n, int[] lost, int[] reserve) { int answer = 0; int[] attendables = new int[n + 1];// 학생 수는 1 ~ n 까지 Arrays.fill(attendables, 1); // 최초값 1로 세팅 //여벌 추가 for(int r : reserve){ attendables[r] ++; } //도난처리. 빌릴 수 없으면 참석 가능에서 차감. for(int l : lost){ if(l == 1){ //바로 뒷 번호한테만 빌릴 수 있음. if(attendables[l +1] <= 1){ attendables[l] --; } else { attendables[l +1] --; } } else if(l == n){ // 바로 앞 번호한테만 빌릴 수 있음. if(attendables[l -1] <= 1){ attendables[l] --; } else { attendables[l -1] --; } } else { if(attendables[l +1] <= 1 && attendables[l -1] <= 1){ attendables[l] --; } else { if(attendables[l +1] > 0) attendables[l +1] --; else if(attendables[l -1] > 0) attendables[l -1] --; } } } for(int i = 1; i < attendables.length; i++){ if(attendables[i] > 0) answer ++; } return answer; }
발견된 문제
1.여벌 체육복 학생이 도난당한 경우 미처리
2.빌려주는 우선순위 문제 (앞번호 vs 뒷번호)
3.불필요한 조건 분기 (1번, n번 학생에 대한 특수 처리)수정
1. 도난과 체육복 대여 처리를 분리
2. 우선 앞번호한테서 빌리도록 수정
3. 배열 크기를 한칸 더 늘리고 보유갯수 > 1 에게만 빌려 불필요한 분기처리 제거.public int solution2(int n, int[] lost, int[] reserve) { int answer = 0; int[] students = new int[n + 2];// 학생 수는 1 ~ n 까지 0번 과 n + 1번은 버퍼로 둔다. Arrays.fill(students, 1); // 최초값 1로 세팅 //여벌 추가 for(int r : reserve){ students[r] ++; } //도난처리. for(int l : lost){ students[l] --; } //빌리기 for(int i = 1; i <= n; i++) { if(students[i] == 0){ if(students[i -1] > 1) { students[i - 1] --; students[i] ++; } else if(students[i + 1] > 1){ students[i + 1] --; students[i] ++; } } } for(int i = 1; i < students.length -1; i++){ if(students[i] >= 1) answer ++; } return answer; }
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] k번째 수 자바 정렬 (0) 2025.04.06 [프로그래머스] 모의고사 자바 완전순회 (0) 2025.04.06 [프로그래머스] 실패율 자바 리스트 정렬, 객체 (0) 2025.04.05 [프로그래머스] 크레인 인형뽑기 게임 자바 Stack (0) 2025.04.05 [프로그래머스] 키패트 누르기 자바 좌표 절대값 (0) 2025.04.05