반응형

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

[파이썬, Python] 백준 11728: 배열 합치기

문제 https://www.acmicpc.net/problem/11728 11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거 www.acmicpc.net 코드 n, m = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) ans = sorted(a+b) for i in ans: print(i, end=' ') 설명 우선 각 리스트를 받아준다. 파이썬은 리스트를 + 연산자를 통해서 합칠..

[파이썬, 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..

[파이썬, Python] 백준 11279: 최대 힙

문제 https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 코드 import heapq import sys input = sys.stdin.readline n = int(input()) arr = list() for i in range(n): x = int(input()) if x == 0: if not arr: print("0") else: print(-heapq.heappop(arr)) else: heapq.heappush..

[파이썬, Python] 백준 15651: N과 M (3)

문제 https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 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): s.append(i) dfs() s.pop() dfs() 설명 앞서 풀었던 문제와 굉장히 유사하다. https://looancheong.tistory.com/14..

[파이썬, Python] 백준 11656: 접미사 배열

문제 https://www.acmicpc.net/problem/11656 11656번: 접미사 배열 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. www.acmicpc.net 코드 s = input() word = list() for i in range(len(s)): word.append(s[i:]) for i in sorted(word): print(i) 설명 우선 단어를 입력받고, 접미사를 넣을 리스트를 만든다. 그리고 입력받은 단어의 부분 단어(접미사)를 word에 추가해 준다. 사전순으로 정렬하여 출력형식에 맞게 출력해 준다.

[파이썬, Python] 백준 7785: 회사에 있는 사람

문제 https://www.acmicpc.net/problem/7785 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) man = {} for i in range(n): a, b = input().split() if b == 'enter': man[a] = b else: del man[a] ans = man.keys() for i in sorted(ans, revers..

[파이썬, Python] 백준 14501: 퇴사

문제 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 코드 n = int(input()) t = list() p = list() dp = [0] * (n+1) for _ in range(n): a, b = map(int, input().split()) t.append(a) p.append(b) for i in range(n-1, -1, -1): if t[i] + i > n: dp[i] = dp[i+1] else: dp[i] = max(p[i] + dp[i + t[i]], dp[i+1]) print(dp[0]) 설명 우선 입력값을 다 받아주고 dp 리스트를 [0]으로 n+1개 만들어..

반응형