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 |
Tags
- Python
- 커스텀 헤더
- 디자인 패턴
- @FeignClient
- JavaScript
- 파이썬
- 99클럽
- Spring multimodule
- DesignPattern
- 개발자부트캠프추천
- 단기개발자코스
- 인프콘 2024
- 취업리부트코스
- spring batch 5.0
- 1주일회고
- TiL
- 빈 조회 2개 이상
- 프로그래머스 이중우선순위큐
- infcon 2024
- 항해99
- 빈 충돌
- jwt
- 프로그래머스
- KPT회고
- 전략패턴 #StrategyPattern #디자인패턴
- 구글 OAuth login
- 디자인패턴
- jwttoken
- 코딩테스트 준비
- 개발자 취업
Archives
- Today
- Total
m1ndy5's coding blog
[수학] 백준 15649번 N과 M(1) with python 본문
https://www.acmicpc.net/problem/15649
n, m = map(int, input().split())
pair = []
def btracking(n, m, pair):
if len(pair) == m :
print(' '.join(map(str,pair)))
return
for i in range(1, n+1):
if i not in pair:
pair.append(i)
btracking(n, m, pair)
pair.pop()
btracking(n, m, pair)
굉장히 유명한 문제 중 하나인 n과 m!
하지만 푸는 방법을 모르겠어서 이 문제는 그냥 조금만 고민하다가 구글링 해봤다...ㅎ
알고리즘 중에서 백트래킹 방법을 사용해야했던 문제였다. (스터디에 정리할 예정)
[1, 2, 3, 4] 에서 4개 뽑는 예시로 설명하자면
pair이라는 리스트를 만들어 한개 한개씩 넣다가 4개가 되면 함수를 종료하는 재귀적으로 돌아가게 되어있는 코드이다.
- 1번째 bt 실행 pair = [1]
- 2번째 bt 실행 pair = [1, 2]
- 3번째 bt 실행 pair = [1, 2, 3]
- 4번째 bt 실행 pair = [1, 2, 3, 4]
- 5번째 bt 실행, pair의 길이 4, 5번째 bt 종료
- 다시 4번째 bt 마저 실행, 4를 pop, 4번째 bt 종료, pair = [1, 2, 3]
- 다시 3번째 bt 마저 실행, 3을 pop, pair에 4가 없으므로 pair = [1, 2, 4], 4번째 bt 실행
- ...
이런식으로 실행되게 된다.
N과 M 시리즈는 굉장히 많은것으로 알고있는데 1번째는 중복을 허용한 ([1, 2, 3, 4]와 [1, 2, 4, 3]을 다른 것이라고 봄) 문제였다.
굳!!
참고한 블로그 : https://jiwon-coding.tistory.com/21
'알고리즘 with python > 수학' 카테고리의 다른 글
[수학] 백준 9020번 골드바흐의 추측 with python (0) | 2023.03.07 |
---|---|
[수학] 백준 2609번 최대공약수와 최소공배수 with python (유클리드 호제법) (0) | 2023.03.01 |
[수학] 백준 4948번 베르트랑 공준 with Python(pypy3와 python3의 차이점은?) (0) | 2023.02.27 |
[수학] 백준 1978 소수 찾기 with python (0) | 2023.02.27 |
[수학] 백준 1929번 소수 구하기 with python (0) | 2023.02.27 |