본문 바로가기

전체 글636

N과 M (3) ( 15651 번 ) 15651번: N과 M (3) 🧠 알고리즘백트래킹 (Backtracking) ✔️ 동작 방식문제 핵심 아이디어1부터 N까지의 자연수 중에서 길이가 M인 중복 가능 수열을 모두 생성하는 문제이다.현재 선택된 수열(now_lst)을 기준으로 재귀적으로 탐색한다.재귀 구조현재 수열(now_lst)의 길이가 M이면, 즉시 출력하고 재귀 종료. 아직 길이가 M보다 짧다면, 1부터 N까지 반복num을 수열에 추가(append)_dfs(now_lst) 재귀 호출 (같은 수 포함 가능)재귀 종료 후 pop()으로 수열 상태 복원 (백트래킹)최종 출력길이가 M인 모든 수열을 탐색 과정에서 즉시 출력하며, 반복문이 1→N 순으로 진행되어 사전 순으로 출력됨. 🧾 코드import sys# 필요 파라미터# 1) 현재 배열.. 2026. 1. 4.
N과 M (2) ( 15650 번 ) 15650번: N과 M (2) 🧠 알고리즘백트래킹 (Backtracking) ✔️ 동작 방식문제 핵심 아이디어1부터 N까지의 자연수 중에서 중복 없이 M개를 선택하는 모든 조합을 구하는 문제이다.현재 선택된 수열(now_lst)과 시작 인덱스(start)를 기준으로 재귀적으로 탐색한다.재귀 구조현재 수열(now_lst)의 길이가 M이면 출력하고 재귀 종료.아직 길이가 M보다 짧다면, 시작 인덱스 start부터 N까지 반복:n_lst[idx]를 수열에 추가_dfs(idx + 1, now_lst) 재귀 호출 (다음 수부터 선택)재귀 종료 후 pop()으로 수열 상태 복원 (백트래킹)최종 출력 길이가 M인 모든 조합을 탐색 과정에서 즉시 출력한다. 🧾 코드import sys# 필요한 파라미터# 1) 현재.. 2026. 1. 4.
N과 M (1) ( 15649 번 ) 15649번: N과 M (1) 🧠 알고리즘 백트래킹 (Backtracking) ✔️ 동작 방식문제 핵심 아이디어 1부터 N까지의 자연수 중에서 중복 없이 M개를 선택하는 모든 수열 을 구하는 문제이다. 이를 위해 현재까지 선택한 숫자(now_lst)와 이미 사용한 숫자를 기록하는 배열(check)을 함께 관리하며, 가능한 모든 경우를 재귀적으로 탐색한다. 재귀 구조 현재 수열(now_lst)의 길이가 M이 되면 ' '.join(map(str, now_lst)) 형태로 문자열을 만들어 즉시 출력한다. 아직 길이가 M보다 짧다면, 1부터 N까지의 숫자 중 아직 사용되지 않은 숫자(check[num] == True)를 하나 선택한다. 선택한 숫자를 now_lst에 추가하고 해당 숫자의 사용 여부를 Fa.. 2026. 1. 4.
암호 만들기 ( 1759 번 ) 1759번: 암호 만들기 🧠 알고리즘백트래킹 (Backtracking / DFS) ✔️ 동작 방식문제 핵심 아이디어주어진 문자 집합(c_list)에서 길이 l의 문자열을 만들되,최소 1개의 모음(a, e, i, o, u)과 최소 2개의 자음이 포함되어야 함.순서대로 증가하는 조합만 선택하며, 중복 사용은 불가.재귀 구조 현재 수열의 길이가 l이면 모음 개수와 자음 개수로 조건을 바로 확인한다.조건을 만족하면 ''.join(now_lst) 형태로 문자열을 만들어 즉시 출력한다.아직 길이가 l보다 작으면,정렬된 문자 리스트(c_list)에서 현재 위치(start) 이후의 문자만 선택하여 탐색한다.선택한 문자를 now_lst에 추가한 뒤,모음이면 m_count + 1자음이면 z_count + 1 로 값을 .. 2026. 1. 4.