일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 모각코
- Kruskal
- django
- MyPlaylist
- 알고리즘
- 백준
- BFS
- 장고
- 소프트웨어공학
- Bellman-Ford
- B대면노래방
- 그리디알고리즘
- programmers
- 종합설계
- 데이터베이스
- 코드트리
- codetree
- minimum spanning tree
- 함밥
- 백트래킹
- SQL
- 동적계획법
- DP
- 프로그래머스
- 최소스패닝트리
- Planned
- 실습
- DFS
- 파이썬
- 마라마라빔
- Today
- Total
목록백준 (85)
Leta Learns
문제 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)
문제 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 끝나는 시간 기준으로 정렬한 후에 시작하는 시간 기준으로도 정렬해주어야 한다는 거 깜빡해서 틀렸다. ㅋㅋ 그리디 기본 문제 좋아 import sys input = sys.stdin.readline n = int(input()) meet = [list(map(int, input().split())) for _ in range(n)] meet.sort(key=lambda x:(x[1], x[0])) t = 0 #time cnt = 0 for i in range(n): if t
문제 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 이중 for문 사용했다가 가뿐하게 시간초과 걸렸다. 리스트로 입력받은 후에 집합으로 바꿔주어 교집합 리스트를 만들어서 해결하였다. import sys input = sys.stdin.readline n, m = map(int, input().split()) nh = [input().strip() for _ in range(n)] #not hear ns = [input().strip() fo..
문제 https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net ㅋㅋㅋㅋ아무 생각 없이 for문 사용해서 풀었더니 4중 for문이 나왔다 껄껄.. 당연히 시간초과 났고 ㅋㅋ 일이 있어서 나가야 했기 때문에 고치지 않고 놔두었다가 오늘 다시 풀었다. 다른 사람들 풀이를 보니 boolean 연산자를 사용하길래 나도 참고하여 풀었다. startswith 메소드 파이썬 처음 공부할 때 보고 실제로 쓰는 건 처음인데 이런 문제에 꽤나 유용한..
문제 https://www.acmicpc.net/problem/3649 3649번: 로봇 프로젝트 각 테스트 케이스마다 한 줄에 하나씩, 구멍을 완벽하게 막을 수 있는 두 조각이 없다면 'danger'를 출력한다. 막을 수 있는 경우에는 'yes ℓ1 ℓ2'를 출력한다. (ℓ1 ≤ ℓ2) 정답이 여러 개인 경우에 www.acmicpc.net 본인 스스로 그리디를 잘 푼다고 (감히) 생각해왔는데 요며칠 그리디 문제들을 풀어보니 절대 아니었다는 것을 깨달았다. 오늘 푼 이분탐색 문제가 더 수월했다. 입력받은 레고 조각들을 리스트에 담아 for문을 돌려서 비교를 하였다. 구멍의 너비와 두 조각 길이의 합이 같은 경우 ans 리스트에 append를 하였다. 구멍을 막을 수 있는 경우가 여러 개가 존재하면 두 조..
문제 https://www.acmicpc.net/problem/1205 1205번: 등수 구하기 첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보 www.acmicpc.net 어제 조금 정신 없는 상태에서 풀었더니 제출도 못하고 예제부터 틀렸었다. 어제는 일이 생겨서 다른 거 하다가 다시 못 풀어서 오늘 마저 풀었다. 어제 푼 코드를 보니 그냥 뭐 말도 안 되는 코드길래 ㅋㅋ 싹 다 갈아 엎었다. n: 리스트에 있는 점수의 개수. p: 랭킹 리스트의 개수. n = 10, p = 5의 경우, 리스트에 10개(n)의 점수가 있어도 랭킹 리..
문제 https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 1700번에 비하면 쉬운 문제였다. (실버1) 순위를 입력받는 거라서 1이 좋은 건데 처음에 5가 좋은 거라고 착각했다. 문제 다시 읽어보다가 깨닫고 수정했다. 람다를 이용해서 서류 순위, 면접 순위 기준으로 다중 정렬을 했는데, 동석차가 없으니 서류 기준으로만 정렬하고 서류 1위면 일단 채용한다. (cnt = 1) 서류 1위의 면접 순위를 first 변수에 넣고 for..
문제 https://www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 그리디 오랜만에 풀어서 어려웠다... 골드1이기도 했고...... 구조를 잡는 것부터 어려웠다. 빈 콘센트가 존재하는 경우 플러그를 꽂고, 이미 해당 기기가 꽂혀있는 경우에는 다시 꽂지 않아야 한다. 콘센트가 꽉 차 있고, 해당 기기가 꽂혀있지 않은 경우에는 두 가지를 고려해야 한다. 멀티탭에 꽂혀있는 기기들 중 이후에 재사용하는 기기가 없는 경우 재사용하는 기기가 있는 경우 1번의 경우 재..
문제 https://www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력 www.acmicpc.net permutation 함수를 사용해서 모든 경우를 다 확인하였다. 최근에 브루트포스 문제를 풀고 있었는데 감이 잘 잡히지 않아서 순열, 조합 함수를 직접 만들어보지는 못하더라도 일단 라이브러리라도 써서 문제를 풀어보자 라는 마음가짐이었다. 그래서 어찌저찌 permutations 라이브러리를 사용해서 코드를 만들기는 했다. 딱 봐도 시간초과 날 것 같아서 pypy3로 제출했는데 5분 동안 기..
문제 https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 이 문제를 어렵게 풀게 된 이유는 크게 두 가지가 있다. 첫 번째는 visited 배열을 알파벳 개수에 맞춰 만들지 않고 입력받은 알파벳 리스트의 해당 인덱스를 1로 바꾸어주는 방법을 선택했다는 점이다. 그리고 같은 알파벳을 두 번 이상 지나갈 수 없으므로 check 리스트에 해당 알파벳을 append 하여 중복을 확인하는 방식이었다. ex) CAAB 이 경우, C를 지나갔다고 하면 ..