Algorithm/BOJ
[백준] 10819 차이를 최대로
메린지
2024. 4. 10. 05:09
1. 문제
https://www.acmicpc.net/problem/10819
10819번: 차이를 최대로
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
www.acmicpc.net
2. 풀이
백트래킹도 좀 감이 오는거같다!! 후 코테 이제 드루와 (사실 들어오지 마세요ㅠ
문제는 연속된 숫자끼리의 차이 절댓값을 max로 만드는거고, 우선 백트래킹으로 푸는거에 중점을 뒀다.
1) total_max라는 전역변수 만들어주고, 어디서 처음 계산을 시작할지 한번씩 돌려준다.
2) 백트래킹 함수 내부: 다돌았을때 멈춘다 (return). total이 크면 바꿔준다.
visited는 index 저장 공간이고, 제일 최근 값과 다음 값의 차이가 max인 경우를 다음 방문으로 설정한다.
그리고 또 다시 재귀로 돌리기~
## code ##
import sys
n = int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline().split()))
def bt(visited: list, total: int):
global total_max
# print(visited, total)
if len(visited) >= len(nums):
if total > total_max:
total_max = total
return
max_val, max_idx = 0, 0
for j in range(n):
if j not in visited:
if max_val < abs(nums[visited[-1]] - nums[j]):
max_val = abs(nums[visited[-1]] - nums[j])
max_idx = j
visited.append(max_idx)
bt(visited, total + max_val)
total_max = 0
for i in range(n):
bt([i], 0)
print(total_max)
+ 그거 아시나요 ???
global / nonlocal의 차이를 ,,,
* global : main의 변수 (global 변수) 를 함수 내부 변수로 공유하도록 하는 선언
* nonlocal : 큰 함수 내부 안에 다른 함수가 있다면, 큰 함수의 변수를 내부 함수와 공유하도록 선언
자 그래서 재밌게도 코드를 전체 짜는 백준은 보통 global을 자주 활용하고
제출하는 코드가 함수고 우리가 그 내부를 짜는 프로그래머스에는 보통 nonlocal을 쓴다,,
ㅋㅋㅋ ㅋ