smooth waters run deep

1d-1c/Programmers

Level1_체육복 (JAVA)

yeon_11 2020. 11. 2. 23:49
 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = n;

		boolean[] nohave = new boolean[n+1];
		boolean[] borrow = new boolean[n+1];
        
		for(int i=0; i<lost.length; i++){
			nohave[lost[i]] = true; //잃어버린 학생 true 로 체크
			answer--;
		}

		for(int i=0; i<reserve.length; i++){
			borrow[reserve[i]] = true; //빌려줄 수 있는 학생 true 로 체크
		}

		for(int i=0; i<lost.length; i++){
			int num = lost[i];
			if(nohave[num] && borrow[num]){
				borrow[num] = nohave[num] = false;
				answer++;
				continue;
			}
			if(nohave[num] && !borrow[num]){
				if(num-1>=1 && borrow[num-1] && !nohave[num-1]){
					borrow[num-1] = nohave[num] = false;
					answer++;
					continue;
				}
				if(num+1<=n && borrow[num+1] && !nohave[num+1]){
					borrow[num+1] = nohave[num] = false;
					answer++;
					continue;
				}
			}
		}

		return answer;
    }
}

 

1. 체육복을 잃어버려 가지고 있지 않은 학생 = nohave[] 배열에 true 로 표시

   여분 체육복이 있어 빌려줄 수 있는 학생 = borrow[] 배열에 true 로 표시

 

2. 초기 answer값을 n으로 설정하고, 체육복 잃어버린 학생 수만큼 뺀 상태로 탐색 시작!

 

3. 체육복을 잃어버린 학생을 기준으로 탐색한다 == lost[] 배열로 탐색

 

   1) 체육복을 잃어버렸고 && 여분 체육복이 있다면 - 여분 체육복을 자신이 입어야 하기 때문에 answer++

 

   2) 체육복을 잃어버렸고 && 여분 체육복이 없다면

      2-1) 왼쪽 학생(num-1)이 여분 체육복이 있고 && 체육복을 잃어버리지 않았다면 - answer++

      2-2) 오른쪽 학생(num+1)이 여분 체육복이 있고 && 체육복을 잃어버리지 않았다면 - answer++

 

 

'1d-1c > Programmers' 카테고리의 다른 글

Level2_카카오프렌즈 컬러링북 (JAVA)  (0) 2020.11.05
Level2_기능개발 (C++) (JAVA)  (0) 2020.11.05
Level1_모의고사 (JAVA)  (0) 2020.11.02
Level1_예산 (JAVA)  (0) 2020.11.02
Level1_두 개 뽑아서 더하기 (JAVA)  (0) 2020.10.31