문제
https://school.programmers.co.kr/learn/courses/30/lessons/1845
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 이해 && 풀이
이건 문제를 이해하는것부터 쪼금 시간이 걸렸다. 경우의 수를 막...어우
최대로 가져갈수 있는 폰켓몬이 몇마리이고 경우의 수가 어떻게 되고 뭐라고 막 써있지만 우리가 풀어내야할 문제를 보면 정작 중요한 포인트는 따로 있다.
사실 경우의 수가 딱히 필요가 없다 그냥 박사님이 가지고 있는 포켓몬이 종류가 아무리 많아 봤자 (마릿수 / 2) 만큼 가져갈 수 있다는 것이다. 하지만 포켓몬의 종류가 그보다 적다면 어떻게 해야하는가? 그것이 중요하다
적다는 것은 포켓몬의 종류가 겹친다는 뜻이고 2마리를 가져가든 5000마리를 가져가든 가져가는 종류는 겹친다는 뜻이다.
박사님의 폰켓몬의 종류가 (마릿수 / 2) 보다 다양하면 그만큼 가져가면 되고 더 적으면 종류 갯수 만큼 가져가게 되는것이다
문제의 정답 예시를 보고 설명을 해보자면
- 마릿수 / 2 = 2 이고 박사님이 가지고 있는 폰켓몬의 종류는 3마리이다.
근데 문제는 몇마리 가져갈수 있느냐는 것이다. 종류가 암만 많아봐야 (마릿수 / 2) 인 2마리만 가져갈수 있다 - 최대로 가져갈 수 있는 몬스터는 3마리이고 박사님이 가지고 있는 포켓몬의 종류도 3마리이다. 그럼 3마리 가져갈수 있다.
- 최대로 가져갈 수 있는 몬스터는 3마리이지만 종류가 2마리 밖에 없다 그럼 2마리 가져갈 수 밖에...
사실 이문제는 경우의 수 때문에 많이 헷갈릴수 있다.
이런식으로 경우의 수를 막 적어놓으니 우리가 가져갈수 있는 포켓몬의 경우의 수를 구하라 같은 문제 일 것이다 라고 추측이 가기 때문이다. 하지만 문제를 잘 읽어봐야한다.
어쨌든 중요한건 그럼 이걸 이제 코드로 어떻게 녹이느냐 내가 신경 쓴것은 두개이다
- 중복이 너무 많다 폰켓몬 중복 갯수 세는데 한참이다.
- set을 사용해야겠다고 생각했다
- set에 들어간 숫자가 마릿수 / 2 보다 작다면 그냥 종류의 갯수를 뜻하는 set.size() 가져오면 되겠다
- 둘중에 더 작은 것을 가져오기 때문에 Math.min 을 사용하면 한결 편하다.
'코딩테스트 > 🧮 프로그래머스' 카테고리의 다른 글
🧮 [프로그래머스] N개의 최소 공배수 (Java) ft.유클리드 호재법 (0) | 2023.09.26 |
---|---|
🧮 [프로그래머스] 이진 변환 반복하기 (JAVA) (0) | 2023.09.21 |
🧮 [프로그래머스] 푸드파이트 대회(JAVA) (0) | 2023.08.12 |
🧮 [프로그래머스] 1차 비밀지도 (0) | 2023.08.11 |
🧮 [프로그래머스] 예산(JAVA) (0) | 2023.08.06 |