https://github.com/Dev-Guccin
Guccin
https://github.com/Dev-Guccin
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 알고리즘 (140)
    • 삽질방지 (13)
    • SystemHacking (1)
    • 일상 (4)
    • 개발 (8)
    • 스프링 부트 REST API 개발일지 (5)
    • JPA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 유클리드호제법
  • heapq
  • 유니온 파인드
  • 스택
  • 최소힙
  • LIS
  • MST
  • 다이나믹 프로그래밍
  • 백준
  • DFS
  • 이분 탐색
  • counter
  • 다이나믹프로그래밍
  • 큐
  • 12015
  • DP
  • 그리디
  • 파이썬
  • 백트래킹
  • 최단경로
  • Python
  • 재귀함수
  • 그래프
  • BFS
  • 다익스트라
  • 재귀
  • 이분탐색
  • 프로그래머스
  • python3
  • 최대공약수

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
https://github.com/Dev-Guccin

Guccin

알고리즘

백준 9375 풀이 (패션왕 신혜빈, Counter)

2021. 3. 2. 20:46

크게 어려운 점은 없었다. 다만 코드를 짤때 예외나 조건을 잘 봐줘야한다.

문제는 단순하게 경우의 수를 구해주면 된다.

옷을 돌려입는 경우의 수만 구하면 되는거 같지만 안입는 경우도 고려하여 계산 해야하기 때문에 각 옷마다 +1을 해주어 경우의 수로 곱해주면된다.

예를 들어 안경 2개, 모자 2개라면

3 x 3 = 9이므로 여기에 둘다 착용하지 않는 경우 -1을 해주면 8이 된다.

(단, 이때 옷을 입지 않는 testcase가 0인 경우도 고려해주어야 한다.)

이러한 방식을 코딩해주면 아래와 같다.

n = int(input())
for _ in range(n):
    t = int(input())
    if t == 0:
        print(0)
        continue
    dic = {}
    for _ in range(t):
        name,kinds = input().split()
        if kinds in dic:# 존재하며
            dic[kinds] += 1
        else:
            dic[kinds] = 1
    print(dic)
    num = list(dic.values())
    print(num)
    if len(num) == 1:
        num[0]+=1
    else:
        for i in range(len(num)-1):
            if i == 0:
                num[i+1] = (num[i]+1) * (num[i+1]+1)
            else:
                num[i+1] = num[i] * (num[i+1]+1)
    print(num[-1]-1)

코드를 보면 상당히 코드가 길고 지저분하다. 

고수들의 코드를 슬쩍 보니 Counter를 사용하는 경우도 존재했다.

1. 각 옷의 종류만 리스트에 담는다.

2. 담은 리스트를 Counter로 선언해준다.

3. 리스트를 차례로 1씩 더하며 곱해준다.

이렇게 로직을 짜면 내가 짠 코드의 약 1/3으로 줄어든다......ㄷㄷ 역시 능력자들

Counter쓸 생각 하지도 못하고 딕셔너리로 짰는데

 

다음에는 중복되는 값을 다루어야 할때 Counter 모듈을 사용해보자!

'알고리즘' 카테고리의 다른 글

백준 10828 풀이 (스택, sys.stdin.readline, 입력속도 높이기)  (0) 2021.03.04
백준 2004 풀이 (조합 0의 개수)  (0) 2021.03.03
백준 1010 풀이 (다리 놓기, 다이나믹 프로그래밍)  (0) 2021.03.02
백준 11051 풀이 (이항 계수 2, 다이나믹 프로그래밍)  (0) 2021.03.01
백준 11050 풀이 (이항 계수 1, 팩토리얼)  (0) 2021.03.01
    '알고리즘' 카테고리의 다른 글
    • 백준 10828 풀이 (스택, sys.stdin.readline, 입력속도 높이기)
    • 백준 2004 풀이 (조합 0의 개수)
    • 백준 1010 풀이 (다리 놓기, 다이나믹 프로그래밍)
    • 백준 11051 풀이 (이항 계수 2, 다이나믹 프로그래밍)
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin

    티스토리툴바