From e9668d3921529b58b6e950b4157594c48aa573e7 Mon Sep 17 00:00:00 2001 From: Sumin Date: Tue, 10 Oct 2023 14:51:02 +0900 Subject: [PATCH] =?UTF-8?q?Create=20=EB=A1=A4=EC=BC=80=EC=9D=B4=ED=81=AC?= =?UTF-8?q?=20=EC=9E=90=EB=A5=B4=EA=B8=B0=20sumin.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sumin.py" | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 "Programmers/\353\241\244\354\274\200\354\235\264\355\201\254 \354\236\220\353\245\264\352\270\260/sumin.py" diff --git "a/Programmers/\353\241\244\354\274\200\354\235\264\355\201\254 \354\236\220\353\245\264\352\270\260/sumin.py" "b/Programmers/\353\241\244\354\274\200\354\235\264\355\201\254 \354\236\220\353\245\264\352\270\260/sumin.py" new file mode 100644 index 0000000..6ba04bb --- /dev/null +++ "b/Programmers/\353\241\244\354\274\200\354\235\264\355\201\254 \354\236\220\353\245\264\352\270\260/sumin.py" @@ -0,0 +1,53 @@ +""" +풀이시간: 20분 + + +topping: 롤케이크에 올려진 토핑들의 번호를 저장한 정수배열(1 ≤ topping의 길이 ≤ 1,000,000) +- 1 ≤ topping의 원소 ≤ 10,000 + + +전체 토핑의 개수와 토핑의 가짓수에서 철수가 먹게되는 토핑의 개수와 가짓수를 계속해서 갱신하며 답을 찾아나간다. +이 때, set 자료형을 써서 철수가 먹게되는 토핑의 가짓수를 O(1)에 탐색한다. + +<시간복잡도> +O(N) +""" +from typing import List +from collections import Counter + + +def solution(topping: List) -> int: + """ + topping: 롤케이크에 올려진 토핑들의 번호를 저장한 정수 배열 + """ + answer = 0 # 롤케이크를 공평하게 자르는 방법의 수 + tot = Counter(topping) # 각 토핑의 개수 + tot_cnt = len(tot) # 전체 토핑의 가짓수 + + # 철수가 먹게되는 토핑의 종류 + eat = set() + eat_cnt = 0 + for x in topping: + # 기존에 없는 토핑인 경우 -> 토핑을 set에 추가하고, 먹게되는 토핑의 가짓수도 증가 + if x not in eat: + eat.add(x) + eat_cnt += 1 + # 전체 토핑에서 철수가 먹게되는 토핑의 개수 1 감소 + tot[x] -= 1 + if tot[x] == 0: # 만약 해당 토핑을 모두 철수가 먹게된다면 동생이 먹는 토핑의 가짓수 1 감소 + tot_cnt -= 1 + if eat_cnt == tot_cnt: # 철수가 먹는 토핑의 가짓수와 동생이 먹는 토핑의 가짓수가 같아지면 경우의 수 1 증가 + answer += 1 + elif eat_cnt > tot_cnt: # 철수가 먹는 가짓수가 더 커진다면 더 이상 확인할 필요 없으니 반복문 종료 + break + + return answer + + +def main() -> None: + case1 = [1, 2, 1, 3, 1, 4, 1, 2] + case2 = [1, 2, 3, 1, 4] + print(solution(case1)) # 2 + print(solution(case2)) # 0 + +main() \ No newline at end of file