우당탕탕 개발일지
[순열] 백준 5568번 Sliver 4 카드 놓기(Python 파이썬) 본문
💡문제 링크
https://www.acmicpc.net/problem/5568
💡문제 분석 요약
n개의 숫자들 중에서 k개를 가로로 이어서 만들 수 있는 숫자조합의 개수를 구하는 문제이다.
순서가 상관이 있으므로 combinations가 아닌 permutations를 사용한다.
💡알고리즘 설계
순열을 이용하는 문제
1. 카드 숫자들을 card 리스트에 넣는다.
2. card에서 k개의 원소를 순열로 뽑은 후 만들어진 숫자를 정수로 변환한 뒤 int_list에 넣는다.
3. set() 함수를 이용하여 int_list에서 중복을 제거한 뒤, 리스트의 길이를 구해 정수의 개수를 구한다.
💡코드
from itertools import permutations
# input
n = int(input())
k = int(input())
card = []
int_list = []
# make the card list(str)
for _ in range(n):
card.append(input())
# make the combination list(int)
for i in permutations(card, k):
int_list.append(int(''.join(i)))
print(len(set(int_list)))
💡 오답 풀이
...
💡 다른 풀이
import sys
import itertools
n = int(input())
k = int(input())
cards = [sys.stdin.readline().strip() for _ in range(n)]
print(len(set("".join(i) for i in itertools.permutations(cards, k))))
반복문을 리스트 안에 넣어서 코드의 길이를 확 줄어버렸다.
💡 느낀점 or 기억할정보
입력값을 빨리 불러오는 sys.stdin.readline()
참조
'알고리즘' 카테고리의 다른 글
[완전탐색] 프로그래머스 level 2 소수찾기 (Python 파이썬) (0) | 2024.07.02 |
---|---|
[스택/큐] 프로그래머스 level 2 주식가격 (Python 파이썬) (0) | 2024.07.02 |
[그리디] 백준 Silver 4 로프(Python 파이썬) (0) | 2024.06.24 |
[해시] 프로그래머스 Level 3 베스트앨범 (Python 파이썬) (0) | 2024.06.21 |
[이진탐색] 백준 Silver 4 1920 수 찾기 (Python 파이썬) (2) | 2024.06.11 |