목록코팅테스트/백준 문제 모음 (296)
For Programmer
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PGJvx/btriRXR4KkL/Ij6aWrHW9OVP3LNGI13zWK/img.png)
코드 import sys N = int(input()) #도시의 개수 travel_cost = [list(map(int, input().split())) for _ in range(N)] min_value = sys.maxsize #출력할 최소값 정의 def dfs_backtracking(start, next, value, visited): #시작도시번호,다음도시번호,비용,방문 도시 global min_value if len(visited) == N: #만약 방문한 도시가 입력받은 도시의 개수라면 if travel_cost[next][start] != 0: #마지막 도시에서 출발 도시로 가는 비용이 0이 아니라면(즉,갈수 있다면) min_value = min(min_value, value + travel..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vuQ4r/btriFjBBrRz/wuJVikFLwsMJ5DY2RDrKUk/img.png)
위 문제는 파이썬의 itertools.permutations 의 순열을 뽑는 라이브러리를 이용하거나 직접 순열을 뽑는 함수를 작성하여 문제를 해결해도 된다. 하지만 라이브러리를 이용하게 하지 못할 경우도 있기 때문에 직접 순열을 뽑는 함수를 익혀 놓는 것이 좋다. 코드(라이브러리 이용) import itertools N = int(input()) input_array = list(map(int, input().split())) result = 0 #결과 값을 저장할 result 값 선언 def result_solve(array): # 리스트의 차를 구하는 공식 global result def_result = 0 #각 원소의 차를 저장 for i in range(len(array) - 1): def_res..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rWDVJ/btriCFrxUft/RKoQy5xW1e6GV4ytRwwsgK/img.png)
코드 N = int(input()) input_array = list(map(int, input().split())) for i in range(N - 1, 0, -1): if input_array[i - 1] > input_array[i]: for j in range(N - 1, 0, -1): if input_array[i - 1] > input_array[j]: input_array[i - 1], input_array[j] = input_array[j], input_array[i - 1] input_array = input_array[:i] + sorted(input_array[i:],reverse=True) print(*input_array) exit() print(-1) -> 10972 번 문제와..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PrC2Q/btriBAYDaze/3T5261HiEk02tSR6Ib1UL1/img.png)
코드 import sys sys.setrecursionlimit(100001) #재귀 횟수 제한 해제 N = int(input()) input_array = [x for x in range(1, N + 1)] #1~N까지 선언 result_array = sorted(input_array, reverse=True) #재귀 탈출을 위해 모든 순열 마지막 인자를 선언 def solve(def_array): print(*def_array) #리스트 출력 if def_array == result_array: #만약 순열과 모든순열의 마지막 순열이 같다면 exit() #코드 종료 for i in range(N - 1, 0, -1): #마지막 항부터 돈다 if def_array[i - 1] < def_array[i]..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bEwzeX/btriFtQTlqb/UZFsbCskKhfLAIZVCdq8V0/img.png)
코드 N = int(input()) input_array = list(map(int, input().split())) for i in range(N - 1, 0, -1): # 마지막 항부터 돈다 if input_array[i - 1] < input_array[i]: # 만약 앞 열의 값이 그 뒷열의 값보다 작다면 for j in range(N - 1, 0, -1): # 다시 그 앞 열의 값을 맨 뒷열부터 비교 if input_array[i - 1] < input_array[j]: # 그 앞열의 값이 뒤에 있는 어느 열보다 작다면 input_array[i - 1], input_array[j] = input_array[j], input_array[i - 1] # 그 두 값을 스왑 input_array = i..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bfyJ4C/btriAHiQJQy/CidJaHkAFa7KbkHwAku8mk/img.png)
코드 k = int(input()) sign = list(map(str, input().split())) visitied = [False] * 11 minResult = "" maxResult = "" def possible(i, j, sign): if sign == '>': return i > j else: return i < j def solve(depth, s): global minResult, maxResult if depth == k + 1: if len(minResult) == 0: minResult = s else: maxResult = s return for i in range(10): if not visitied[i]: if depth == 0 or possible(s[len(s) - 1..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dCRSlF/btriuU2flDh/mOFvmWYlRjpnglDKetqbr1/img.png)
코드 import sys input = sys.stdin.readline N = int(input()) array = [] result = 1e9 #결과값 출력을 위한 result값을 문제의 범위를 벗어나는 큰 수로 초기화 visited = [False] * (N + 1) #방문여부를 확인하는 리스트 for _ in range(N): array.append(list(map(int, input().split()))) def solve(depth, idx): global result if depth == (N // 2): # N // 2 번만큼 재귀를 돌면 start, link = 0, 0 #start팀과 link팀 0으로 선언 for i in range(N): for j in range(i + 1, N):..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bHJUag/btriooI7ckB/yOodwoathwGc3BMD2y2uZ1/img.png)
코드 # n+1일째 되는 날 퇴사 n = int(input()) t = [0] * (n + 1) p = [0] * (n + 1) answer = 0 for i in range(1, n + 1): t[i], p[i] = map(int, input().split()) def go(day, sum_): global answer # 종료조건: 퇴사날에 딱 맞췄을 때 if day == n + 1: answer = max(sum_, answer) return # 불가능한 경우: 상담을 했을 때, 퇴사날을 넘어가는 경우 if day > n + 1: return # 상담을 한다 go(day + t[day], sum_ + p[day]) # 상담을 안한다 go(day + 1, sum_) go(1, 0) print(answ..