우당탕탕 개발일지

[순열] 백준 5568번 Sliver 4 카드 놓기(Python 파이썬) 본문

알고리즘

[순열] 백준 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()

참조

https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline

 

[Python 문법] 파이썬 입력 받기(sys.stdin.readline)

파이썬으로 코딩 테스트를 준비한다면, 반드시 알아야 할 입력방식인 sys.stdin.readline()에 대한 정리 입니다.

velog.io