[백준] 15663번(N과 M(9))

·2023년 7월 4일

백준 문제풀이

목록 보기
98/159

백준 15663번


처음 제출한 코드

m, n = map(int, input().split())
array = list(map(int, input().split()))
stack = []
visited = [False]*m
result = []

def dfs():

  if len(stack) == n:
    ele = ' '.join(map(str, stack))
    result.append(ele)
    return

  for i in range(len(array)):
    if visited[i] == False:
      stack.append(array[i])
      visited[i] = True
      dfs()
      visited[i] = False
      stack.pop()

dfs()

result = list(set(result))
result.sort()

for i in range(len(result)):
  print(result[i])

set 자료형을 활용하여 중복 원소 제거

  • 예제에 대해서는 정답을 출력하는데 채점 결과 오답
  • 아무리 생각해도 왜 오답인지 모르겠음(...)

최종 제출 코드

m, n = map(int, input().split())
array = list(map(int, input().split()))
array.sort()
stack = []
visited = [False]*m

def dfs():

  if len(stack) == n:
    print(*stack)
    return

  chk = 0
  
  for i in range(len(array)):
    if visited[i] == False and chk != array[i]:
      stack.append(array[i])
      visited[i] = True
      chk = array[i]
      dfs()
      visited[i] = False
      stack.pop()

dfs()

코드 출처

◼ 같은 깊이에 있는 원소들에 대해 이미 stack에 추가되었는지 확인하는 변수 chk

  • 같은 깊이에서 이미 stack에 추가된 원소와 같은 값을 가진 원소의 경우, stack에 추가하지 않는다.
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글