- Today
- Total
hye-log
[프로그래머스]롤케이크 자르기(Python) 본문
0. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/132265
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
1) 두 사람에게 케이크를 나눌 때 토핑의 종류가 같도록 나누기
2. 입출력
# input
topping = [1, 2, 1, 3, 1, 4, 1, 2]
# output
result = 2
3. 코드
from collections import Counter
def solution(topping):
answer = 0
old_bro = Counter(topping) # 형 : topping을 Counter로 초기화
young_bro = set() # 동생 : set으로 초기화
for i in topping: # topping에서 하나씩 고려함
old_bro[i] -= 1 # old_bro 하나 빼기
young_bro.add(i) # young_bro 하나 더하기
if old_bro[i] == 0: # old_bro 요소의 개수가 0이면
del old_bro[i] # 해당 요소 제거하기
if len(old_bro) == len(young_bro): # 만약 old_bro와 young_bro의 요소의 종류의 개수가 같으면
answer += 1 # 가능한 경우 1 추가
return answer
실행 결과
4. 회고
이 문제는 토핑의 종류가 같도록 나누어야 하기 때문에, set 함수를 이용하였다. 처음에는 topping 배열을 두 개로 나눌 때 슬라이싱을 이용한 뒤 set 함수로 토핑의 종류를 세는 방식을 문제를 해결하였다. 하지만 반복문마다 매번 배열을 새로 만들다보니 시간 초과가 발생했다.
for i in range(1, len(topping)):
old_bro = topping[:i]
young_bro = topping[i:]
if len(set(old_bro)) == len(set(young_bro)):
answer += 1
다른 방법으로 문제를 해결하기 위해서 처음부터 토핑의 종류와 개수를 나눠주는 Counter를 이용했다. old_bro는 전체 topping을 Counter로 받고, young_bro는 set()으로만 정의했다. for 문을 이용하여 topping의 개수를 기준으로 반복문을 세웠고, old_bro에서 하나 빼서 young_bro에 하나 더하는 방식으로 코드를 작성했다. 만약 old_bro의 해당 요소의 개수가 0이면 해당 요소를 del로 삭제한다. 마지막으로 old_bro와 young_bro의 요소의 종류가 같으면 answer에 1을 추가한다.
5. Github
https://github.com/iihye/Algorithm/blob/main/Programmers/cut_rollcake.py
GitHub - iihye/Algorithm: Solving algorithm problems
Solving algorithm problems. Contribute to iihye/Algorithm development by creating an account on GitHub.
github.com
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스]프린터(Python) (0) | 2022.11.19 |
---|---|
[프로그래머스]기능 개발(Python) (0) | 2022.11.18 |
[프로그래머스]할인 행사(Python) (0) | 2022.11.12 |
[프로그래머스]베스트앨범(Python) (0) | 2022.11.09 |
[프로그래머스]전화번호 목록(Python) (0) | 2022.11.06 |