문제 확인
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
- 가짓수를 동일하게 케이크를 분리해야 한다.
- 앞 케이크 분리 시, 뒷 케이크의 일부 성분이 없어져 가짓수가 바뀔 수 있다는 것을 주의해야 한다.
- 이 생각을 안하고 이분 탐색으로 접근해서 풀었고, 결국 스스로 푸는데는 실패했다.
- 아래는 다른 사람의 코드를 보고 이해한 내용이다.
각 케이크 가짓수를 따로 저장해서 관리
- 우선 각 케이크의 idx 별 가짓수를
pt1_cnt
,pt2_cnt
에 저장한다. - 모두 저장이 끝나면
pt1_cnt[i]
와pt2_cnt[i + 1]
이 동일한 지 확인하고, 그 수를 세면 된다.
def solution(topping):
# idx 별 케이크 가짓수 보관
pt1_cnt, pt2_cnt = [], []
# 나눈 케이크의 가짓수 확인
pt1_unique, pt2_unique = set(), set()
# pt1 케이크 확인
for t in topping:
pt1_unique.add(t)
pt1_cnt.append(len(pt1_unique))
# pt2 케이크 학인
for t in topping[::-1]:
pt2_unique.add(t)
pt2_cnt.append(len(pt2_unique))
# 비교를 위해서 역순으로 되돌리기
pt2_cnt = pt2_cnt[::-1]
return sum([1 for i in range(len(pt1_cnt) - 1) if pt1_cnt[i] == pt2_cnt[i + 1]])
롤케이크 자르기
https://school.programmers.co.kr/learn/courses/30/lessons/132265 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞
comdoc.tistory.com
- 위 코드와 유사한 풀이 방법으로,
Counter
와set
을 사용해서도 풀 수 있다. set
은pt1
,dic
을pt2
로 생각하면 된다.
from collections import Counter
def solution(topping):
dic = Counter(topping)
set_dic = set()
res = 0
for i in topping:
dic[i] -= 1
set_dic.add(i)
if dic[i] == 0:
dic.pop(i)
if len(dic) == len(set_dic):
res += 1
return res
[프로그래머스] Lv.2 롤케이크 자르기 | Python - velog
철수는 롤케이크를 두 조각으로 잘라서 동생과 한 조각씩 나눠 먹으려고 합니다. 이 롤케이크에는 여러가지 토핑들이 일렬로 올려져 있습니다. 철수와 동생은 롤케이크를 공평하게 나눠먹으려
velog.io