-
프로그래머스 (Level 1) - 체육복Coding Test/Coding Test 문제 풀이 2022. 1. 4. 13:00
문제 설명
풀이
학생들이 가지고 있는 체육복의 개수를 배열 내에 저장하고, 배열을 하나씩 탐색하면서 체육복을 가지고 있지 않은 학생일 경우 앞, 뒤 학생에 빌릴 수 있는지 검사를 하며 문제를 해결하였다.
우선, 체육복의 개수를 저장할 배열 person을 선언한다. person 배열을 선언한 후 배열 내 모든 원소를 1로 초기화한다.
이후, lost 배열 내의 원소를 탐색하며, 해당 원소에 대한 person의 값을 1씩 감소시키고, reserve 배열 내의 원소를 탐색하며, 해당 원소에 대한 person의 값을 1씩 증가시킨다.
이 과정을 거치게 되면 학생이 현재 가지고 있는 체육복 개수를 구할 수 있다.
person 배열 내의 원소를 하나씩 탐색하면서 원소가 0인 경우(체육복이 없는 학생인 경우) 앞, 뒤 원소에서 빌릴 수 있는지 계속해서 확인해가며, 체육복 개수에 대한 값을 갱신한다.
person 배열의 탐색이 끝났으면, 0이 아닌 원소(체육복을 소유한 학생)의 수를 반환해준다.
전체 소스코드
import java.io.*; import java.util.*; public class Solution09 { public int solution(int n, int[] lost, int[] reserve) { int[] person = new int[n + 2]; Arrays.fill(person, 1); person[0] = 0; person[n + 1] = 0; for (int number : lost) person[number]--; for (int number : reserve) person[number]++; for (int i = 1; i < person.length - 1; i++) { /** 체육복이 없는 학생인 경우 */ if (person[i] == 0) { /* 앞사람이 여별의 체육복이 있는지 확인 */ if (person[i - 1] == 2) { person[i - 1] = 1; person[i] = 1; continue; } /* 뒷사람이 여별의 체육복이 있는지 확인 */ if (person[i + 1] == 2) { person[i + 1] = 1; person[i] = 1; continue; } } } int answer = 0; for (int i = 1; i < person.length - 1; i++) if (person[i] != 0) answer++; return answer; } }
728x90'Coding Test > Coding Test 문제 풀이' 카테고리의 다른 글
프로그래머스 (Level 2) - 위장 (0) 2022.01.06 프로그래머스 (Level 2) - 타겟 넘버 (0) 2022.01.05 프로그래머스 (Level 2) - 소수 찾기 (0) 2022.01.03 프로그래머스 (Level 2) - 더 맵게 (0) 2021.12.28 프로그래머스 (Level 2) - 기능개발 (0) 2021.12.28