프로그래머스[초급]
인원수 n , 체육복을 잃어버린 배열1, 체육복의 여벌이 있는 인원 배열2
이 주어질때, 체육복의 여벌이 있는 인원이 3번이라고 하면 체육복을 잃어버린 2,4번중 한명에서 체육복을 빌려줄수 있다
이렇게 최대 몇명이 체육복을 입을수 있는지를 나타내라
내 풀이
==> 나는 일단 문제를 보고 Map을 이용해서 풀면 간단하겠다라고 생각을 했었다.
1. 그래서 우선 map을 선언하고 맵의 키값에 n명의 숫자를 key 값으로 value값에는 체육복을 1개씩 가지고 있도록 1씩 넣어주었다.
1-1 . 이때 여벌의 체육복이 있는 인원에게는 1개씩 더 해주도록 2중 for문을 돌렸다.
2. 이렇게 총가지고 있는 체육복 수를 넣어주고, 잃어버린 인원을 for문을 통해서 value값에서 잃어버린사람에게는 -1 씩 해주었다.
3. 마지막으로 2중 for문으로 현재 체육복이 0개인 인원과 체육복이 2벌 가지고 있는 사람을 찾아서 2번 가진 사람이 1벌 가진사람에게 1개주고 (2 ->1개 ) 0벌 가지고 있는 사람은 2개인 사람에게 1벌을 받도록 하는 for문을 돌렸다.
4. 그리고 마지막으로 map의 key값을 ketSet()으로 받아서 value 값이 0개 이상인수(체육복이 있는사람)을 체크하여 리턴해줬다.
============================================================================================
더 간단한 방법으로는
내가 생각했을때 사람과, 가지고 있는 수 를 모두 저장해야하니 Map을 사용해야 한다고 생각했는데
그냥 1차원 배열을 사용해도 됬다
왜냐하면
결국 n인원수 이므로, 1차원배열을 통해서
st[0] = 1 ,st[1] = 2, -----st[n] = n+1 로 관리를 해도 되었다.
for문을 돌리면서 우선 student 요소가 0인것을 고르고,
student[i-1] = 2 일때 조건이 있는데 만약 i 가 0이 들어가면 배열의 길이 에러가 발생하므로
>>> i>0 조건이 추가되었고
student[i+1]==2 의 경우 i 가 4일경우 stduent[5]가 되므로 배열의 길이가 넘어가므로 i < n-1 조건이 붙었다.
그리고 마지막에
해당 조건에 포함되지 않는 경우는 0이고, i+1, i-1 해도 받을수 있는경우가 아니므로 answer-- 해주면
결국 못받는 인원의 숫자가 5-answer 되므로 해당 값을 리턴해주면된다.
'Algorithm' 카테고리의 다른 글
[Algorithm] 포켓몬 고르기 (0) | 2022.06.04 |
---|---|
[Algorithm] 가장 점수가 높은 사람을 리턴 하라 (0) | 2022.06.02 |
[Algorithm] K번째 숫자 (0) | 2022.06.01 |
[Algorithm] 완주하지 못한 선수 (0) | 2022.05.31 |
[Algorithm/Lamda] 함수형 인터페이스 (0) | 2022.05.28 |