반응형

개발 연습장/백준 문제풀이 221

[파이썬, Python] 백준 14916: 거스름돈

문제 https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 코드 n = int(input()) cnt = 0 while n > 0: if n % 5 == 0: cnt += n // 5 break else: n -= 2 cnt += 1 if n < 0: print(-1) else: print(cnt) 설명 단순하게 5원부터 지급하고 나머지를 2원을 지급하려고 하면 오류가 난다. 거스름돈이 5의 배수여서 딱 나누어 떨어진다면 상관이 없지만 그렇지 않다면 2를 우선 빼주어서 계산을 해야 한다. 2를 빼다가 음수로 넘어가서 n이 음수가 된다면 -1을 출력하고 그렇지 않다면 결..

[파이썬, Python] 백준 10825: 국영수

문제 https://www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 코드 n = int(input()) score = list() for _ in range(n): s = input().split() score.append(s) score.sort(key = lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0])) for i in score: print(i[0]) 설명 우선 n과 주어진 점수들을 넣을..

[파이썬, Python] 백준 2644: 촌수계산

문제 https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**7) n = int(input()) a, b = map(int, input().split()) m = int(input()) graph = [[] for _ in range(n+1)] visited = [False] * (n+1) res = list() for _ in range(m): x, y = m..

[파이썬, Python] 백준 11931: 수 정렬하기 4

문제 https://www.acmicpc.net/problem/11931 11931번: 수 정렬하기 4 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) nums = list() for i in range(n): num = int(input()) nums.append(num) for i in sorted(nums, reverse = True): print(i) 설명 n을 입력받아준다. 숫자를 담을 리스트도 생성해 준다. n의..

[파이썬, Python] 백준 1789: 수들의 합

문제 https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 코드 n = int(input()) cnt = 0 res = 0 while True: cnt += 1 res += cnt if res > n: break print(cnt - 1) 설명 문제를 이해하는데 애를 먹었다. 서로 다른 N개의 자연수의 합이 S라고 한다 = 최대한 많은 자연수를 이용해서 만들 수 있어야 한다. 이렇게 이해를 하면 조금 더 쉽지 않을까 싶다. 예를 들어 S가 10이라면 1,2,3,4를 사용해서 만들 수 있다. S가 11이라면 역시 1,2,3,4 만을 이용해서 만들 수 있다. S가 15가..

[파이썬, Python] 백준 11724: 연결 요소의 개수

문제 https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 코드 import sys input = sys.stdin.readline sys.setrecursionlimit(10**7) cnt = 0 n, m = map(int, input().split()) graph = [[] for _ in range(n+1)] visited = [False] * (n+1) for _ in range(..

[파이썬, Python] 백준 1302: 베스트셀러

문제 https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 코드 n = int(input()) book = dict() for i in range(n): title = input() if title not in book: book[title] = 0 book[title] += 1 book = sorted(book.items(), key = lambda x: (-x[1],x[0])) print(book[0][0]) 설명 우선 딕셔너리를 이용해서..

[파이썬, Python] 백준 18258: 큐2

문제 https://www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline n = int(input()) q = deque([]) for _ in range(n): order = input().split() if order[0] == 'push': q.append(order[1]) elif order[0] == 'p..

[파이썬, Python] 백준 2003: 수들의 합 2

문제 https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) num = list(map(int, input().split())) cnt = 0 inter_sum = 0 end = 0 for start in range(n): while inter_sum < m and end < n:..

[파이썬, Python] 백준 2822: 점수 계산

문제 https://www.acmicpc.net/problem/2822 2822번: 점수 계산 8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문 www.acmicpc.net 코드 li = [] idx = [] ans = 0 for i in range(8): li.append(int(input())) for i in range(5): idx.append(li.index(max(li)) + 1) ans += li[li.index(max(li))] li[li.index(max(li))] = -1 idx.sort() print(ans) for i in idx: ..

반응형