알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
https://school.programmers.co.kr/learn/courses/30/lessons/42862
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Think🤔
n -> 전체 학생의 수 2명 ~ 30명
체육복 도난 1명 ~ n명 , 중복 번호 X
reserve -> 여벌의 체육복 1명 ~ n명 , 중복 번호 X
앞 뒤로만 체육복을 빌려줄 수 있고, 최대 많은 애들이 수업을 들을 수 있는 경우를 구하는 문제
Solution✍
import java.util.Arrays;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length;
for(int i=0; i<lost.length; i++){
for(int j=0; j<reserve.length; j++){
if(lost[i] == reserve[j]){
answer++;
lost[i] = 0;
reserve[j] = 0;
break;
}
}
}
for(int i=0; i<lost.length; i++){
for(int j=0; j<reserve.length; j++){
if(lost[i] == reserve[j]-1 || lost[i] == reserve[j]+1){
answer++;
reserve[j] = 0;
break;
}
}
}
return answer;
}
}
앞 뒤로 빌려줄 수 있는 사람을 찾고 , ArrayList를 만들지 않고, 0으로 바꿔준다.
-> 0에서 -1로 수정
0으로 하면 +1할때, 1이 되면 그 값이 빌려줄 수 있는 값이 돼서, 2가 잃어버린 경우 한가지의 경우가 추가될 수 있음
-> 정렬을 하는 이유?
정렬을 하지 않았을 때 12,13이 실패했음... 흠?
정렬을 하지 않는 경우
4, 6, 8 이 잃어버린 경우 정렬이 되어있으면 3,5,7이 빌려줘서 입을 수 있지만
7, 5, 3 으로 빌려줄 수 있게 되면 큰 값 들이 먼저 빌려서 3은 6을 못빌리므로 테스트 케이스에 통과할 수 없음
import java.util.Arrays;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length;
Arrays.sort(lost);
Arrays.sort(reserve);
for(int i=0; i<lost.length; i++){
for(int j=0; j<reserve.length; j++){
if(lost[i] == reserve[j]){
answer++;
lost[i] = -1;
reserve[j] = -1;
break;
}
}
}
for(int i=0; i<lost.length; i++){
for(int j=0; j<reserve.length; j++){
if(lost[i] == reserve[j]-1 || lost[i] == reserve[j]+1){
answer++;
reserve[j] = -1;
break;
}
}
}
return answer;
}
}
Review🤩
배열 지울 수 없으면 다른값을 대체하는 방법을 사용하자!
'Algorithm' 카테고리의 다른 글
[프로그래머스] 최소직사각형 (0) | 2022.07.27 |
---|---|
[프로그래머스] 소수 만들기 (0) | 2022.07.26 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.07.11 |
[프로그래머스] 있었는데요 없었습니다 (0) | 2022.07.08 |
[프로그래머스] 없어진 기록 찾기 (0) | 2022.07.08 |