문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/42862
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.
전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.
입출력 예시
풀이
여벌의 체육복이 있는 사람이 도난 당했을 때와 자신의 앞뒤 사람의 여분이 있을 경우로 나눠서 2중 반복문으로 구현하였습니다.
체육복을 빌렸거나 빌려줬으면 -2로 임의로 설정해서 체크를 해주었고 answer를 더해주고 return 해주었습니다.
※ 다른 사람들의 풀이를 보던 중 n의 수만큼 1차원 배열을 선언하고 answer의 초기값을 n으로 하여 체육복을 못빌린 학생들을 빼주는 방식을 보고 깔끔하고 풀이방식이 좋다고 생각하여 다시 풀어봤습니다.
코드
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length;
Arrays.sort(lost);
Arrays.sort(reserve);
for(int lostIndex = 0; lostIndex < lost.length; lostIndex++) {
for(int reserveIndex = 0; reserveIndex < reserve.length; reserveIndex++) {
if(lost[lostIndex] == reserve[reserveIndex]) {
answer++;
lost[lostIndex] = -2;
reserve[reserveIndex] = -2;
break;
}
}
}
for(int lostIndex = 0; lostIndex < lost.length; lostIndex++) {
for(int reserveIndex = 0; reserveIndex < reserve.length; reserveIndex++) {
if(lost[lostIndex] - 1 == reserve[reserveIndex] ||
lost[lostIndex] + 1 == reserve[reserveIndex] ) {
answer++;
reserve[reserveIndex] = -2;
break;
}
}
}
return answer;
}
}
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n;
int[] student = new int[n];
for(int index : lost) {
student[index - 1]--;
}
for(int index : reserve) {
student[index - 1]++;
}
for(int index = 0; index < n; index++) {
if(student[index] == -1) {
if(index - 1 >= 0 && student[index - 1] == 1) {
student[index]++;
student[index - 1]--;
} else if(index + 1 < n && student[index + 1] == 1) {
student[index]++;
student[index + 1]--;
} else {
answer--;
}
}
}
return answer;
}
}
제한사항
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm][Programmers] 폰켓몬 (Java) (0) | 2023.07.20 |
---|---|
[Algorithm][Programmers] 더 맵게 (Java) (0) | 2023.07.20 |
[Algorithm][Programmers] 최소직사각형 (Java) (0) | 2023.07.20 |
[Algorithm][Programmers] K번째수 (Java) (0) | 2023.07.20 |
[Algorithm][Programmers] 타겟 넘버 (Java) (0) | 2023.07.19 |