본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Silver 5][Python] 5568번 : 카드 놓기

by 빛밤하늘 2021. 6. 29.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

5568번: 카드 놓기

예제 1의 경우 상근이는 11, 12, 21, 112, 121, 122, 212를 만들 수 있다.

www.acmicpc.net

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin
# permutations를 사용하기 위해 import합니다.
from itertools import permutations


# 첫째 줄에 카드의 개수 n을 입력합니다.
# 정수형으로 변환합니다.
n = int(stdin.readline())
# 둘째 줄에 선택하는 카드의 수 k를 입력합니다.
# 정수형으로 변환합니다.
k = int(stdin.readline())
# 카드들에 쓰여있는 수를 저장할 리스트 변수를 선언합니다.
cards = [None] * n

# 카드의 개수 n만큼 반복합니다.
for card_idx in range(n):
    # 카드에 적혀있는 수를 입력합니다.
    # 맨 끝의 \n은 떼어내고 cards에 넣어줍니다.
    cards[card_idx] = stdin.readline().rstrip()

# 카드를 k개 뽑아서 순서대로 나열해본 경우들을 리스트 변수로 선언합니다.
card_pers = list(permutations(cards, k))
# 튜플로 만들어져 있는 card_pers의 값 하나하나들을 숫자로 된 문자열로 만들어 준 후,
# set 변수에 넣어 중복되는 것은 지워줍니다.
numbers = set(map(''.join, card_pers))

# numbers의 길이인 상근이가 만들 수 있는 정수의 개수를 출력합니다.
print(len(numbers))

결과

 

뭔가 더 간결하게 짤 수 있는 코드인 것 같은데 잘 모르겠습니다...

다른 사람들의 코드를 보고 공부해봐야겠습니다.

 

그리고 문제를 풀 때 파이썬을 사용할 때는 permutations를 제공해줘서 그나마 편하게 푸는 느낌이었습니다.

카테고리를 확인해보니 다른 언어를 사용해서 풀 때 적용하는 방법들이 적혀있는 것 같은데

다른 언어로는 어떻게 풀어야 할지 더 생각해봐야겠습니다.

 

풀고나서도 아쉬움이 많이 남는 문제였습니다...

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글