이번 문제는 혼자 놀기의 달인 문제이다.
설명을 2번 읽어보았지만... 좀 설명 자체가 불친절하다.
설명을 정리하면 아래와 같은 조건으로 게임을 진행하게 된다.
1. 총 100장의 카드가 존재하며, 그 중 임의의 카드 수를 정해 카드 수 이하의 값이 적힌 카드와 준비한 카드 수 만큼 상자를 준비한다. (즉 10장이라면, 상자도 10개가 되며, 이때 준비된 카드는 1~10까지 적힌 카드들이다)
2. 준비된 상자에는 카드가 한장씩만 보관되며, 순서를 무작위로 섞어서 나열한다 .(리스트 형태)
3. 임의의 상자 하나를 선택하여 상자안의 숫자를 확인하고, 해당 숫자에 해당하는 상자를 반복해서 연다. 이는 열어야 하는 상자가 이미 열려있을 때까지 반복한다.
4. 이렇게 연 상자들은 1번 그룹이다. 따로 보관한다
5. 만약 남는 상자가 없다면 게임은 종료되며, 획득한 점수는 0점이다.
6. 상자가 남았다면 다시 3~4 를 반복한다. 2번 그룹이 된다.
7. 두 구룹의 상자 개수를 곱한 값이 게임의 점수이다.
입출력 예를 보면
먼저 1번 상자를 열게 되면 8이고, 8번 상자는 4이다, 4번 상자는 7이고, 7번 상자는 1이다.
따라서 [8,4,7,1] 이 1번 그룹이 된다. 그리고 cards 는 [0,6,3,0,2,5,0,0] 가 된다. 여기서 0은 빈 상자를 의미한다.
다음 2번 상자를 열어 6 -> 5- > 2 순으로 2번 그룹이 정해진다.
3번 그룹은 의미가 없기 때문에 두 그룹의 상자 개수 4*3 = 12 가 반환된다.
코드를 잘때 의외로 반복 횟수 설정에서 한번 고민을 했었다. 하지만 카드는 100장 이기 때문에 주저없이 카드의 길이만큼으로 설정 하였다.
그리고 만약 temp 와 cards 의 길이가 같은 경우라면, 모든 카드를 한번에 다 소진하였다는 뜻이므로 0 을 반환한다.
그렇지 않다면 정렬된 temp 를 box 에 중복값 없이 넣어준다.
최종적으로 box를 요소의 길이 기준 내림차순 정렬해준 뒤, 첫번째 박스와 두번째 박스의 길이의 곱을 반환해 주면 된다.
'프로그래머스 퀴즈(Python) > level 2' 카테고리의 다른 글
23.02.10 파이썬 코딩 퀴즈#150 택배 상자 (프로그래머스 스쿨) (0) | 2023.02.10 |
---|---|
23.02.10 파이썬 코딩 퀴즈#149 연속 부분 수열 합의 개수 (프로그래머스 스쿨) (0) | 2023.02.10 |
23.02.10 파이썬 코딩 퀴즈#147 할인 행사 (프로그래머스 스쿨) (0) | 2023.02.10 |
23.02.10 파이썬 코딩 퀴즈#146 두 큐 합 같게 만들기 (프로그래머스 스쿨) (0) | 2023.02.10 |
23.02.09 파이썬 코딩 퀴즈#145 양궁대회 (프로그래머스 스쿨) (0) | 2023.02.09 |