-
체육복 (JAVA)프로그래머스 알고리즘 2023. 5. 5. 02:08728x90
예제 #1
1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다.예제 #2
3번 학생이 2번 학생이나 4번 학생에게 체육복을 빌려주면 학생 4명이 체육수업을 들을 수 있습니다.먼저 학생들의 번호를 인덱스로 하는 체육복의 개수를 알려주는 배열을 만든다.
int answer = n; int []arr = new int[n+1]; Arrays.fill(arr, 1); for(int i : lost) arr[i]--; for(int i : reserve) arr[i]++;
Arrays.fill로 모든 배열을 1로 채우고
lost에 있는 값은 도난 당했으므로 --를 해주고 reserve에 있는 것은 ++ 해주었다.
따라서 이제 도난당한 학생의 번호 인덱스의 값은 0이되고 reserve에 해당하는 학생의 인덱스 값은 2가 된다.
for(int i=1;i<=n;i++){ if(arr[i]==0){ if(arr[i-1]==2) //왼쪽학생이 reserve한지 arr[i-1]--; else if(i+1<=n && arr[i+1]==2) //오른쪽학생이 reserve한지 arr[i+1]--; else answer--; // 내 주위에 아무것도 없으면 결국 체육복 못빌림 } }
배열의 인덱스의 값이 0이라는 것은 도난당한 의미이므로, 해당 코드를 실행해준다.
전체 코드이다.
import java.util.*; class Solution { public int solution(int n, int[] lost, int[] reserve) { int answer = n; int []arr = new int[n+1]; Arrays.fill(arr, 1); for(int i : lost) arr[i]--; for(int i : reserve) arr[i]++; for(int i=1;i<=n;i++){ if(arr[i]==0){ if(arr[i-1]==2) arr[i-1]--; else if(i+1<=n && arr[i+1]==2) arr[i+1]--; else answer--; } } return answer; } }
'프로그래머스 알고리즘' 카테고리의 다른 글
전화번호 목록 JAVA (0) 2023.05.05 게임 맵 최단거리 JAVA (0) 2023.05.05 정수 삼각형(JAVA) (0) 2023.05.05 소추 찾기(JAVA) (0) 2023.05.04 가장 큰 수 (JAVA) (0) 2023.05.02