🌞Algorithm/🔥programmers

[programmers] 체육복

뿌야._. 2026. 8. 19. 11:09
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42862
 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


< 체육복 >

 

문제 풀이 (Java)

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

		int arr[] = new int[n + 1];

		for (int i = 1; i <= n; i++) {
			arr[i] = 1;
		}

		for (int i = 0; i < lost.length; i++) {
			arr[lost[i]] -= 1;
		}

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

		for (int i = 1; i <= n; i++) {
			if (arr[i] == 0) {
				if (arr[i - 1] > 1) {
					arr[i - 1] -= 1;
					arr[i] += 1;
				} else if (i < n && arr[i + 1] > 1) {
					arr[i + 1] -= 1;
					arr[i] += 1;
				}
			}
		}

		for (int i = 1; i <= n; i++) {
			if (arr[i] > 0) {
				answer += 1;
			}
		}

		return answer;
	}
}

 

각 학생한테 체육복 1개씩 있다고 가정하여 arr를 초기화한다. lost와 reserve 배열을 순회하며 도난당했으면 -1을, 여벌의 체육복을 가져왔으면 +1을 한다. arr을 순회하며 체육복이 없다면 왼쪽, 오른쪽 순으로 살펴보며 여벌의 체육복이 있다면 빌린다. 최종 arr을 순회하며 체육복이 있는 학생의 수를 센 후 answer을 반환한다. 

 



 

출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges

'🌞Algorithm > 🔥programmers' 카테고리의 다른 글

[programmers] 구명보트  (0) 2026.08.20
[programmers] 모의고사  (0) 2026.08.18
[programmers] 더 맵게  (0) 2026.08.14
[programmers] 주식가격  (0) 2026.08.13
[programmers] 올바른 괄호  (0) 2026.08.12