본문 바로가기

프로그래머스 코딩테스트 연습 Lv1

프로그래머스 코딩테스트 연습 - 모든문제 Lv1 [ 체육복 ]

[문제 설명]

- 전체 학생 수 n

- 체육복을 도난당한 학생 번호가 담긴 배열 lost[]

- 여벌의 체육복이 있는 학생들의 번호가 담긴 배열 reserve[]

- 체육복을 바로 앞 혹은 바로 뒤 번호로만 옮기는게 가능 할 때 가장 많은 학생이 체육복을 나눔받을 수 있는 경우의 최대값을 return!

 

[제한 사항]

- 전체 학생 수는 2이상 30이하

- 도난 당한 학생 수는 1 이상 n 이하 중복 당연히 없음.

- 여벌 체육복 있는 학생 수는 1 이상 n 이하 중복 없음.

- 여벌 있는 애가 도난 당했을 수 있음. 이때 하나만 도난 당했다 가정 하고 체육복도 하나 여벌이기 때문에 빌려줄 수 없음.

 

[입출력 예]

 

[내 풀이]

- 일단 대충 생각을 해봤을때 reserve가 중요 하겠네. reserve끼리도 나눠가질 수 있나? 봤는데 3번째꺼 보니까 아닌듯. 3번예에서 1번옷을 2번주고 2번옷을 3번주는 거면 3명 전부 할수 있는디;; 일단 아닌걸로.

- 앞뒤로 주는거로 생각 해볼까?

- 그냥 무적권 이전으로 보내는데 이전이 있다면 뒤로 보내는거로 하자.

 

[그리디]

그때그때 최선의 선택을 하는거로 그냥 하드코딩 하는거랑 비슷한거 같네.. 뭐 새로운게 있나 싶었는데 그냥 합시다.

 

어라? ㅋㅋㅋ 솔직히 쉽다고 생각했는데 틀리니 당황스러움.. 뭐지 일단 임의 실행이나 테스트케이스중 맞은것도 있으니 다 개념 자체가 틀린건 아닌거 같음.. 

여기 보니까 reserve_set에 이미 제거한 값을 넣어버려서 lost_set 계산할때 이미 제거된거로 나와서 틀렸음! 새로운 변수 만들어서 다시 짜기.

 

이거보다 깔끔한 풀이는 있지만.. 흠 글쎄 이거보다 좋은 풀이는 아직 내 관점에선 없는것 같아서 공부는 패스! 오늘도 수고!!