Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- BFS
- 오토레이아웃
- Swift공부
- SwiftUI
- dfs
- Kotlin
- ios
- greedy algorithm
- 파이썬 풀이
- 정렬
- 알고리즘 공부
- 프로그래머스
- 백준온라인저지
- 그리디 알고리즘
- Algorithm
- 공부
- 백준 온라인 저지
- Autolayout
- Clean Architecture
- UIKit
- 앱개발
- iOS개발
- Level 1
- error
- swift
- 안드로이드 공부
- 파이썬
- Android
- Python
- 알고리즘
Archives
- Today
- Total
Tori의 개발 공부
[Level 2] [python] 롤케이크 자르기 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/132265
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
파이썬 풀이
첫 번째 풀이 (시간 초과)
단순히 for문을 통해 하나씩 차근차근 슬라이싱하며 나눠진 서브 리스트들을 집합 자료형으로 바꿔 중복을 없앤 뒤 길이를 비교하는 방법을 사용하였다.
그러나 대부분의 테스트 케이스에서 시간초과가 발생하였다.
def solution(topping):
answer = 0
for i in range(1, len(topping)) :
a = len(set(topping[:i]))
b = len(set(topping[i:]))
if a == b :
answer += 1
return answer
두 번째 풀이 (다른 사람 풀이 참고)
결국 다른 사람의 풀이를 참고하였다.
colloections모듈의 Counter와 딕셔너리를 사용하는 방법을 사용하였다.
from collections import Counter
def solution(topping):
answer = 0
me = Counter(topping)
bro = {}
for i in range(len(topping)) :
if topping[i] in bro :
bro[topping[i]] += 1
else :
bro[topping[i]] = 1
me[topping[i]] -= 1
if me[topping[i]] == 0 :
del me[topping[i]]
if len(bro) == len(me) :
answer +=1
return answer
우선 Counter를 통해 어떠한 토핑을 몇 개씩 가지고 있는지 딕셔너리에 담아준다.
처음에는 나에게 모든 롤케이크를 배정하고 한 개씩 동생한테 넘겨주며 길이를 비교한다.
이 과정에서 슬라이싱은 사용하지 않고 단순히 딕셔너리의 값을 변경만 해주기 때문에 시간 복잡도를 줄일 수 있는 것 같다.
'Algorithm > 프로그래머스 문제 풀이' 카테고리의 다른 글
[Level 2] [python] 귤 고르기 (0) | 2022.11.24 |
---|---|
[Level 1][python] 명예의 전당 (1) (0) | 2022.11.24 |
[Level 1] [python] 기사단원의 무기 (0) | 2022.11.17 |
[Level 1] [python] 크레인 인형뽑기 게임 (0) | 2022.01.20 |
[Level 1] [python] 실패율 (0) | 2022.01.03 |