자바 초급문제로 맨땅에 해딩하기

다시 시작하는 프로그래머스 문제3. 체육복

Jungsoomin :) 2020. 10. 16. 00:03
  • 1씩 채운다.
  • 각 배열의 원소는 인덱스 + 1 값이므로 -1 해서 해당 인덱스로 잡아 student에서 빼거나 더한다.
  • 1부터 시작하고 length-1 까지 루프를 돌렸다. 중간을 기준으로 앞뒤를 잡으려고 그랬다.
  • 그렇다면 첫수와 끝수의 고려가 필요해져서 분기를 놓았다.
  • 맞았다.
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        // 총 학생 수, 반드시 앞 뒤에서만 빌려줄 수 있음. 인덱스 기준으로 함.

		int[] student = new int[n];

		// 세팅
		for (int i = 0; i < student.length; i++) {
			student[i] += 1;
		}

		for (int i = 0; i < reserve.length; i++) {
			int reserveNo = reserve[i] - 1;
			student[reserveNo] += 1;
		}

		for (int i = 0; i < lost.length; i++) {
			int lostNo = lost[i] - 1;
			student[lostNo] -= 1;
		}
		// 계산
		if (student[0] == 0 && student[1] == 2) {
			student[1] -= 1;
			student[0] += 1;
		}

		for (int i = 1; i < student.length - 1; i++) {
			if (student[i] == 0) {
				if (student[i - 1] == 2) {
					student[i - 1] -= 1;
					student[i] += 1;
				} else if (student[i + 1] == 2) {
					student[i + 1] -= 1;
					student[i] += 1;
				}
			}
		}

		if (student[student.length - 1] == 0 && student[student.length - 2] == 2) {
			student[student.length - 1] += 1;
			student[student.length - 2] -= 1;
		}

		int answer = 0;

		for (int i = 0; i < student.length; i++) {
			answer += (student[i] == 0) ? 0 : 1;
		}
        return answer;
    }
}