반응형

알고리즘 142

[파이썬, 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] 백준 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: ..

[파이썬, Python] 백준 7576: 토마토

문제 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline m, n = map(int, input().split()) tomato = [list(map(int, input().split())) for _ in range(n)] queue = deque([]) dx, dy = [-1, 1, 0, 0], [0, ..

[파이썬, Python] 백준 2161: 카드1

문제 https://www.acmicpc.net/problem/2161 2161번: 카드1 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 코드 from collections import deque num = deque(i + 1 for i in range(int(input()))) ans = list() while len(num) > 1: ans.append(num.popleft()) num.append(num.popleft()) ans.append(num[0]) for i in ans: print(i, end=' ') 설명 ..

[파이썬, Python] 백준 1850: 최대공약수

문제 https://www.acmicpc.net/problem/1850 1850번: 최대공약수 모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오. 예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A www.acmicpc.net 코드 import math n, m = map(int, input().split()) print("1" * math.gcd(n, m)) 설명 규칙성을 발견한다면 간단하게 해결이 가능한 문제였다. 이 문제의 규칙은 주어진 두 수의 최대공약수에 해당하는 수만큼 1이 반복되어 나온다는 것. 따라서 math 모듈의 gcd를 사용하여 최대공약수를 구하고, 그 수만큼 1을 출력해 ..

[파이썬, Python] 백준 15652: N과 M (4)

문제 https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) s = [] def dfs(): if len(s) == m: print(' '.join(map(str,s))) return for i in range(1, n+1): if s: if s[-1] > i: continue s.append(i) dfs() s.pop..

반응형