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 | 29 | 30 | 31 |
Tags
- 알고리즘
- 문자열
- 파이썬
- 스택
- DFS
- 완전탐색
- JS
- react
- 그리디
- 코테
- 재귀
- 백준
- 코딩테스트
- CSS
- 코딩테스트실력진단
- 구현
- DP
- Express
- DFS기초
- BFS
- 코드트리
- socket.io
- 그리디알고리즘
- 스택자료구조
- 블챌
- 자료구조
- react-query
- DFS활용
- 백준알고리즘
- django
Archives
- Today
- Total
꾸준하게 거북이처럼
혼자 놀기의 달인 프로그래머스 - Python 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 이해가 잘 되지 않았던 문제다.
결론적으로 이 문제는 원소의 개수가 가장 큰 두 집합을 구하는 문제다.
cards에서 임의의 숫자를 선택하여 규칙대로 만들어진 1번째로 생긴그룹 2번째로 생긴 그룹의 원소 개수의 곱 중 최대값을 알아내야함.
어떤 수를 먼저 선택해도 규칙대로 하다보면 같은 집합의 형태가 나온다! 나만 그 집합의 순서가 다를 뿐, 그 중 1번 2번 그룹 원소 개수 곱의 최대값을 알아야하니, 제일 원소의 개수가 가장 큰 것 2가지를 구하면된다.
import collections
def solution(cards):
leng = len(cards)
unvisited = [True]*leng
scores = collections.Counter()
for i in range(leng):
if unvisited[i] == True:
scores[i] = 0
pos = i
while True:
unvisited[pos] = False
pos = cards[pos] - 1
scores[i] += 1
if unvisited[pos] == False:
break
# 데이터의 개수가 많은 순으로 정렬된 배열을 리턴
answer = scores.most_common(2)
if len(answer) == 1:
return 0
else:
return (answer[0][1]*answer[1][1])
# 원소의 개수가 가장 큰 두 집합을 알아내는 문제
참고
프로그래머스 혼자 놀기의 달인
문제 설명 혼자서도 잘 노는 범희는 어느 날 방구석에 있는 숫자 카드 더미를 보더니 혼자 할 수 있는 재미있는 게임을 생각해냈습니다. 숫자 카드 더미에는 카드가 총 100장 있으며, 각 카드에는
inspirer9.tistory.com
'Algorithm 문제 & 공부 > 구현' 카테고리의 다른 글
백준 마법사상어와 파이어볼 파이썬 (0) | 2023.07.30 |
---|---|
이차원배열과 연산 백준 파이썬 (0) | 2023.07.22 |
백준 12933번 파이썬 - 오리문제 (0) | 2022.10.01 |
백준 1018.py 체스판 칠하기 (0) | 2022.07.07 |
백준 2231번 - 분해합 : 브루트 포스 알고리즘 (0) | 2022.07.07 |
Comments