일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kruskal
- MyPlaylist
- 파이썬
- 그리디알고리즘
- 알고리즘
- 백트래킹
- BFS
- 소프트웨어공학
- 함밥
- Planned
- 프로그래머스
- DFS
- Bellman-Ford
- 종합설계
- 마라마라빔
- minimum spanning tree
- programmers
- 코드트리
- 실습
- 모각코
- 데이터베이스
- 백준
- 최소스패닝트리
- codetree
- B대면노래방
- DP
- django
- SQL
- 장고
- 동적계획법
- Today
- Total
목록백트래킹 (10)
Leta Learns
문제 https://www.acmicpc.net/problem/15666 15666번: N과 M (12) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net n과 m 처음부터 풀었으면 쉽게 풀 수 있는 문제였다. (10), (11) 코드 적당히 합쳐서 만들면 된다. (11) 코드에 고른 수열이 비내림차순이어야 한다는 조건만 추가해주면 되므로, 시작점을 나타내는 변수 s를 사용하여 현재 값 i 가 시작값인 s 보다 크거나 같은 경우를 골라주면 된다. import sys input = sys.stdin.readline def dfs(s): #s:..
문제 https://www.acmicpc.net/problem/15665 15665번: N과 M (11) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 아 처음에 바로 시도했던 방식이 맞았는데 터미널에서 출력할 때 입출력 구분이 안 돼서 입력 받는 수열까지 출력된 거라고 생각했다. 그래서 다른 방법으로 풀다가 아까 입출력을 헷갈렸다는 것을 깨달았다. 괜히 다른 방법으로 풀었다가 시간초과나고ㅋㅋㅜㅜ 암튼 내가 헛짓해서 그렇지 문제 자체는 n과 m 차례대로 풀었다면 비교적 쉽게 고안할 수 있는 문제였다. 같은 수를 여러 번 골라도 되기 때문..
문제 https://www.acmicpc.net/problem/15664 15664번: N과 M (10) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net n과 m (9) 에서 고른 수열이 비내림차순이어야 한다는 조건만 추가로 고려해주면 되는 문제이다. 시작하는 부분을 s 변수에 넣어 현재 값 i 가 시작값인 s 보다 크거나 같은 경우에만 재귀를 돌게끔 하였다. import sys input = sys.stdin.readline def dfs(s): #s: start if len(ans) == m: print(*ans) return same..
문제 https://www.acmicpc.net/problem/15663 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 접근법이 쉽게 떠오르지 않아서 시간이 좀 걸렸다. 첫 번째 푼 방식은 시간 초과가 났었다. 함수 내부에서 또다른 함수를 호출해서 그런가..? 그냥 봤을 때 코드 자체도 복잡하긴 하다. ㅋㅋ #시간 초과 import sys input = sys.stdin.readline def inter_dfs(i): global ans, num ans.append(num[i]) dfs() ans.pop()..
N과 M (7) https://www.acmicpc.net/problem/15656 15656번: N과 M (7) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 앞서 풀었던 n과 m 문제들과 유사하나, 같은 수를 여러 번 골라도 되기 때문에 dfs 함수의 for문에서 if i not in ans: 조건문을 삭제해주면 된다. import sys input = sys.stdin.readline def dfs(): if len(ans) == m: print(*ans) return for i in num: ans.append(i) dfs..
문제 https://www.acmicpc.net/problem/15655 15655번: N과 M (6) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net n과 m (5) 부터는 앞이랑 같은 유형이라 금방 풀 수 있겠지 싶었는데 (6)에서 바로 제동 걸렸다. n개의 자연수를 입력 받고, 오름차순 정렬한 후에 오름차순인 수열을 구하면 되는 간단한 문제였다. 한 수열에 같은 수가 나오지 않도록 for문 안의 if문에 조건(i > s)만 넣어주면 되는 것이었는데 갑자기 헷갈려서 시간을 좀 소모했다. import sys input = sys...
N과 M (4) https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net n과 m (3)의 방식에서 고른 수열이 비내림차순이어야 한다는 조건만 고려해주면 된다. s 변수를 사용하여 시작하는 지점부터 for 문을 돌려주었다. import sys input = sys.stdin.readline def dfs(s): #s: start if len(ans) == m: print(*ans) return for i in range(s, n+1): ans.appe..
문제 https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net n과 m (3)은 같은 수를 여러 번 골라도 된다는 것이 (1), (2)와 달랐다. (1), (2) 에서는 for문 안에 if i not in ans: 라는 구문을 넣어서 수 하나는 한 번만 들어가게 조건을 걸어주었다. (3)에서는 이 조건문을 빼주었다. 코드를 복붙한 후 지운 게 아니라 처음부터 푼 거라서 (1), (2) 코드랑 디테일은 다르다. import sys input = sys...
문제 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net n과 m ... 구상하기가 쉽지 않다. n과 m (1) 이랑 비슷한데 (2)에서는 오름차순의 수열만을 골라야 했다. ex) [1,2]와 [2,1] 중에서 [1,2]만 취급해야 함 n과 m (1)에서는 for문을 1 ~ n 까지 다 돌렸었는데 이번에는 for문을 돌릴 때 시작점인 s 변수를 두어 s부터 for문을 돌렸다. 이 부분을 생각해내는 게 조금 어려웠고 나머지는 n과 m(1)과 유사하..
문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 보물 문제만 풀기에는 조금 양심에 찔려서 어려워했었던 재귀, 백트래킹 파트 연습하려고 n과 m 하나 풀었다. 시간이 많이 걸리진 않았지만 연습이 많이 안 되어있는 파트라서 쉽진 않았다. 백트래킹 개념 한 번 더 공부하고 풀었다. import sys input = sys.stdin.readline def dfs(d): if d == m: print(*ans) return for i in ra..