-
프로그래머스 (Level 1) - 체육복Coding Test/Coding Test 문제 풀이 2022. 1. 4. 13:00
문제 설명
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
풀이
학생들이 가지고 있는 체육복의 개수를 배열 내에 저장하고, 배열을 하나씩 탐색하면서 체육복을 가지고 있지 않은 학생일 경우 앞, 뒤 학생에 빌릴 수 있는지 검사를 하며 문제를 해결하였다.
우선, 체육복의 개수를 저장할 배열 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