알고리즘
[순열] 백준 5568번 Sliver 4 카드 놓기(Python 파이썬)
민아당긴아
2024. 6. 30. 14:14
💡문제 링크
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()
참조
[Python 문법] 파이썬 입력 받기(sys.stdin.readline)
파이썬으로 코딩 테스트를 준비한다면, 반드시 알아야 할 입력방식인 sys.stdin.readline()에 대한 정리 입니다.
velog.io