Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 풀이
- WarGame
- 파이썬
- injection
- 워게임
- WHS
- command
- 문제풀이
- Python
- dreamhack
- Algorithm
- C언어
- 포렌식
- 디지털 포렌식
- Programmers
- 스터디
- hacking
- Web
- c
- 인프런
- 자라나는새싹
- 백준
- 알고리즘
- 프로그래머스
- 웹해킹
- BaekJoon
- XSS
- CSRF
- 자라나는 새싹
- 드림핵
Archives
- Today
- Total
Hoin's security
Baekjoon 15649번 N과 M(1), 2566번 최댓값 파이썬 풀이 본문

위 문제는 백트래킹 문제이다. 백트래킹은 DFS(Depth-First Search, 깊이 우선 탐색)의 방식을 기반으로, 불필요한 경우를 배제하며 원하는 해답에 도달할 때까지 탐색하는 전략이다.
DFS를 기반으로 두고 있기 때문에 스택(Stack)을 이용해 퇴각을 하며 다음 탐색을 진행하기 때문에 백트래킹(또는 퇴각검색)이라 불린다.
백트래킹은 기본적으로는 모든 경우의 수를 탐색한다는 브루트 포스(Brute Force) 전략을 취하지만, 처리 속도를 향상시키기 위한 가지치기(Pruning)가 중요한 역할을 한다.
n, m = map(int, input().split())
s = []
def f():
if len(s) == m:
print(' '.join(map(str, s)))
return
for i in range(1, n + 1):
if i in s:
continue
s.append(i)
f()
s.pop()
f()
여러번 반복을 돌면서 스택에 값을 push하고 함수가 끝난 후에는 나와야 하기 때문에 pop을 해준다.
항상 1부터 N까지의 자연수를 모두 순회하면, 이미 선택한 숫자를 또 선택해가며 의미없는 작업을 반복한다.
그래서 이미 선택한 숫자를 다시 선택하려 하면 배제하는 방식으로 가지치기를 해준다.

table = [list(map(int, input().split())) for _ in range(9)]
max_num = 0
max_row, max_col = 0, 0
for row in range(9):
for col in range(9):
if max_num <= table[row][col]:
max_row = row + 1
max_col = col + 1
max_num = table[row][col]
print(max_num)
print(max_row, max_col)

이번 코드는 크게 어렵지 않았다. 2차원 리스트 입력받고 하나하나 대조해가며 최댓값을 찾게 했다. 당연히 변수 max를 0으로 초기화했다.
'Algorithm > Baekjoon' 카테고리의 다른 글
Baekjoon 1520번 내리막길, 2629 양팔저울 - Python 문제 풀이 (0) | 2024.04.03 |
---|---|
백준 15651번 N과 M (3), 2839번 설탕 배달 파이썬 풀이 (2) | 2023.11.22 |
2. [5주차] 백준 알고리즘 문제풀이 공 바꾸기 (10813번), 큐 2 (18258번) (0) | 2023.11.02 |
2.[4주차]백준 숫자의 개수 2577번, 블랙잭 2798번 (1) | 2023.11.01 |
2. [3주차] Baekjoon 스택 2 (28278번), 요세푸스 문제 0 (11866번) 파이썬 문제풀이 (0) | 2023.10.04 |