문제 내용 요약 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 문제 원리파악 백트래킹 문제인 만큼 어떻게 백트래킹 되는지 방식을 알아야 된다. 재귀함수 활용한 DFS 탐색 방식 def Back_Track(count, col, i): if count == 0: # 재귀함수를 돌면서 0일때 종료됨 break count -= 1 # 트리로 따지면 가장 안쪽으로 탐색하는 방식 for j in range(1,5): col[i] = j Back_Track(count, col, i+1) col = [0,0,0,0,0] Back_Track(5, col, 0) 문제풀이에 사용되는 For문안의 ..
문제 내용 요약 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다. 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작성해..
문제 내용 요약 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 문제 원리파악 최대 공약수 : 두 수의 약수를 구해서 같은 약수중 최대값 출력 최소 공배수 : 두 수중 작은수에 곱하는 값을 1씩 더해 같아질 때까지 반복 24 18일경우 a0_count = 1 a1_count = 1 18 * 2 = 36 // a1_count + 1증가 24 36 24 * 2 // a0_count + 1증가 이런식으로, 반복하여 같아질 때까지 진행 풀이 a = list(map(int,input().split(" "))) a1_list = [] # 최대 공약수 for i in range(len(a)): plus = [] # 약수 구하는 알고리즘 for j in range(1,a[i]+1..
문제 내용 요약 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 2자리 이상, 1,000,000자리 이하인 숫자입니다. k는 1 이상 number의 자릿수 미만인 자연수입니다 문제 원리파악 처음에는 문제를 잘못 이해해서 permutati..
문제 내용 요약 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오. 입력 : 5 6 3 2 10 -10 8 10 9 -5 2 3 4 5 -10 출력 : 1 0 0 1 1 0 0 1 문제 해석 탐색 과정에서 시간복잡도를 고려해야해서 '이진탐색' 을 구현할 수 있어야한다. 이진탐색 알고리즘 구현 이진탐색의 핵심요소 반복조건 : 전체 리스트 인덱스에서 양 끝의 인덱스가 같거나 / 범위가 넘어갈 때까지 반복 탐색조건 3가지: 1) target이 중간값과 같을경우 '1 '반환 2) target이 중간값보다 작을경우 리스트 : [-3, 7, 9, 14, 25]..
문제 내용 요약 "U X": 현재 선택된 행에서 X칸 위에 있는 행을 선택합니다. "D X": 현재 선택된 행에서 X칸 아래에 있는 행을 선택합니다. "C" : 현재 선택된 행을 삭제한 후, 바로 아래 행을 선택합니다. 단, 삭제된 행이 가장 마지막 행인 경우 바로 윗 행을 선택합니다. "Z" : 가장 최근에 삭제된 행을 원래대로 복구합니다. 단, 현재 선택된 행은 바뀌지 않습니다. 입출력 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" 출처 : 프로그래머스 내가 푼 방식 문제 원리파악 "U", "D", "C", "Z"..