백준 15649. N과 M (1)로 알아보는 .join()
파이썬 map 함수의 특징
백준 15649. N과 M (1)
https://www.acmicpc.net/problem/15649
순열 문제를 보고, dfs 복습을 다시 하고 dfs로 순열을 풀어야 겠다고 생각했다. 그런데 python 의 itertools
로 한번도 permutation을 생성해보지 않은 것을 깨달았고, 이번 기회에 from itertools import permuation
을 사용해서 문제를 풀어봤다.
최종 작성 코드
from itertools import permutations
n, r = map(int, input().split())
arr = []
for i in range(1, n+1):
arr.append(str(i))
permu_list = list(map(' '.join, permutations(arr, r)))
for i in permu_list:
print(i)
첫번째 시도
print(permutations(arr, r))
# <itertools.permutations object at 0x0000015407FBB400>
을 했고 결과는 다음과 같았다. map 함수를 그냥 출력하려고 했을 때와 비슷한 현상인것 같아, map으로 형태를 변환해주려 했다.
두번째 시도
print(list(map(int, permutations(arr, r))))
#TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'
permutation 함수 안의 값이 어떤 식으로 전해지는지를 몰랐만, tuple형식으로 나타난다는 것을 오류를 통해 알 수 있었다.
여기서 나는 예전에도 비슷한 문제가 나왔지만, join이 하는 일을 정확히 이해하지 못한채로 문제를 풀었었기 때문에, 다시join을 활용해야 할 때 하지 못하고 있다는 것을 깨달았다.
구분자.join(array)
는 배열을 문자열로 바꿀 때 쓸 수 있으며, .
앞의 구분자를 어떻게 지정하는가에 따라 출력값의 형태가 달라진다.
arr = ['a', 'b', 'c']
print(''.join(arr)) #abc
print(' '.join(arr)) #a b c
print('\n'.join(arr))
#a
#b
#c
그렇다면 join 해줄 arr를 숫자로 만들면 어떻게 될까?
arr_1 = ['1', '2', '3']
arr_2 = [1, 2, 3]
print(''.join(arr_1)) #TypeError: sequence item 0: expected str instance, int found
print(''.join(arr_2)) #123
문자열을 찾아 그 사이사이를 .join()
앞의 구분자로 구분해주는 역할을 하기 때문에, 에러가 난다.
그래서 내가 택한 방법은
n, r = map(int, input().split())
arr = []
for i in range(1, n+1):
arr.append(str(i))
print(arr) # ['1', '2', '3']
이 방법을 통해 문자열로 값을 넘겨주는 것이었다.
permu_list = list(map(' '.join, permutations(arr, r)))
이제는 join뒤의 값이 str인 원소들로 이루어진 arr이기 때문에, 에러가 발생하지 않는다.
같은 문제를 dfs를 활용해서도 풀어봐야겠다.
Author And Source
이 문제에 관하여(백준 15649. N과 M (1)로 알아보는 .join()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kjasm0714/백준-15649.-N과-M-1로-알아보는-.join저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)