코드(HashSet 이용)
public int solution(int n, int[] lost, int[] reserve) {
// 총인원 - 체육복 분실 인원수
int answer = n-lost.length;
// 카운트 변수 선언
int cnt = 0;
HashSet<Integer> hs = new HashSet<Integer>();
for(int i : reserve) {
hs.add(i);
}
// 여분체육복 가져온 사람이 분실했을 경우
for(int i=0; i<lost.length; i++) {
if(hs.contains(lost[i])) {
hs.remove(lost[i]);
lost[i] = -1;
}
}
for(int i=0; i<lost.length; i++) {
if(lost[i] == -1) {
cnt++;
} else if(hs.contains(lost[i]+1)) {
cnt++;
hs.remove(lost[i]+1);
} else if(hs.contains(lost[i]-1)) {
cnt++;
hs.remove(lost[i]-1);
}
}
return answer+cnt;
}
public static void main(String[] args) {
Solutaion3 sol = new Solutaion3();
int[] lost = {1,2,3};
int[] reserve = {2,3,4};
System.out.println(sol.solution(5, lost ,reserve));
}
설명
여분 체육복이 있는 학생은 다른 사람을 빌려주는 것이 아닌 본인이 입는 다는 것을 신경써야한다.
따라서, HashSet를 선언해서 lost와 reserve에서 중복되는 값을 제거하고 보관하고,
lost학생 중 여분이 있는 학생은 -1로 변경해준다. (이웃하는 학생을 빌려줄 수 있기때문에 제외 시키기위해 -1로 변경)
풀이(초기 풀이법)
int cnt = 0;
// 중복되는 리스트 저장
ArrayList<Integer> list = new ArrayList<Integer>();
// 처음에 중복되는 배열제거
for(int i=0; i<lost.length; i++) {
for(int j=0; j<reserve.length; j++) {
if(lost[i] == reserve[j]) {
list.add(lost[i]);
cnt++;
break;
}
}
}
//System.out.println("cnt : "+cnt + "|| "+list);
//중복을 제거한 분실, 여분 체육복 학생 선언
int[] new_lost = new int[lost.length-cnt];
int[] new_reserve = new int[reserve.length-cnt];
cnt = 0;
// 중복값이 제거된 분실학생 입력
for(int i : lost) {
int num = 0;
for(int j : list) {
if(i == j) {
num++;
break;
}
}
if(num == 0) {
new_lost[cnt] = i;
cnt++;
}
}
cnt = 0;
// 중복값이 제거된 여분학생 입력
for(int i : reserve) {
int num = 0;
for(int j : list) {
if(i == j) {
num++;
break;
}
}
if(num == 0) {
new_reserve[cnt] = i;
cnt++;
}
}
cnt = 0;
//분실 학생
for(int i=0; i<new_lost.length; i++) {
//여분 가져온 학생
for(int j=0; j<new_reserve.length; j++) {
if(new_lost[i] == new_reserve[j]+1 || new_lost[i] == new_reserve[j]-1) {
new_reserve[j] = -1;
cnt++;
break;
}
}
}
// 전체학생-분실학생+중복학생+빌린학생수
return n-lost.length+list.size()+cnt;
[프로그래머스][Level1][포켓몬] (0) | 2021.03.12 |
---|---|
[프로그래머스][Level1][(월간 코드 챌린지 시즌1)두 개 뽑아서 더하기] (0) | 2021.03.11 |
[프로그래머스][Level1][(2019 카카오)크레인 인형뽑기 게임] (0) | 2021.03.08 |
[프로그래머스][Level1][(해쉬)완주하지 못한 선수] (0) | 2021.03.08 |
[프로그래머스][Level1][(완전탐색)모의고사] (0) | 2021.03.07 |