일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- SQL
- DFS
- DP
- 파이썬
- 데이터베이스
- 그리디알고리즘
- B대면노래방
- 코드트리
- 종합설계
- 모각코
- programmers
- Planned
- django
- 함밥
- 프로그래머스
- 장고
- 마라마라빔
- 소프트웨어공학
- 백준
- 백트래킹
- 동적계획법
- BFS
- minimum spanning tree
- codetree
- 알고리즘
- Bellman-Ford
- MyPlaylist
- 실습
- Kruskal
- 최소스패닝트리
- Today
- Total
목록알고리즘 (89)
Leta Learns
문제 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/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 문제가 이해가 안 돼서 한참 멍 때렸다. 테이프 길이가 L이고 좌우로 0.5씩 간격을 주어야 하므로 L-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..
문제 https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 기초부터 다지는 알고리즘 스터디라지만,, 지금 실력에 비해 너무 쉬운 문제를 푼 건 아닌지.. ㅋㅋㅋ하지만 오늘치 금방 끝내서 너무 좋다.. import sys input = sys.stdin.readline n = int(input()) a = list(map(int, input().split())) b = list(map(int, input().split())) a.sort() s..
문제 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 이중 for문 안 쓰려고 슬라이싱 했다. ㅋㅋ import sys input = sys.stdin.readline n = int(input()) time = list(map(int, input().split())) time.sort() w = 0 #대기시간 for i in range(n): wait = time[:i+1] w += sum(wait) print(w)