BOJ/Python 176

백준 1138번 한 줄로 서기 파이썬

https://www.acmicpc.net/problem/1138 1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 www.acmicpc.net 내 답안 N = int(input()) x = list(map(int, input().split())) d = [0] * N for i in range(N): for j in range(N): if x[i] == 0 and d[j] == 0: d[j] = i + 1# i 가 0 부터 시작하니 + 1을 해줌 break elif d[j] == 0: x[i] -= 1 print(' '.join(..

BOJ/Python 2022.06.28

백준 9095번 1, 2, 3 더하기 파이썬

https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 내 답안 dp = [0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 0] for i in range(int(input())): n = int(input()) if n == 1 or n == 2 or n == 3: print(dp[n]) else: for i in range(4, n + 1): dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] print(dp[n]) 처음 접근할 때는 DFS로 돌려서 풀었다. DFS를 돌려보니 규칙이 보였고, 직접 n == 5 인 경우..

BOJ/Python 2022.06.27

백준 1065번 한수 파이썬

https://www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 내 답안 cnt = 99 N = input() if len(N) < 3: print(N) else: for i in range(100, int(N) + 1): if int(str(i)[0]) + int(str(i)[2]) == 2 * int(str(i)[1]): cnt += 1 else: continue print(cnt) 처음 이 문제를 봤을 때 생각했던 건 1. 1부터 99까지는 모두 한수이다. ..

BOJ/Python 2022.06.26

백준 7785번 회사에 있는 사람 파이썬

https://www.acmicpc.net/problem/7785 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 내 답안 (PyPy3) import sys input = sys.stdin.readline emp = [] N = int(input()) for i in range(N): x, y = input().split() if y == 'enter': emp.append(x) else: emp.remove(x) emp.sort(reverse = True) for i ..

BOJ/Python 2022.06.06

백준 4673번 셀프 넘버 파이썬

https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 내 답안 All = set(i for i in range(1, 10001)) S = set() for i in range(1, 10001): for j in str(i): i += int(j) S.add(i) for i in sorted(All - S): print(i) set 연산을 이용해서 1부터 10000까지의 집합에서 생성자가 있는 집합을 ..

BOJ/Python 2022.04.27

백준 1912번 연속합 파이썬

https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 내 답안 N = int(input()) x = list(map(int, input().split())) for i in range(1, N): x[i] = max(x[i], x[i] + x[i - 1]) print(max(x)) 사실 처음에 코드 짤 때는 N = int(input()) x = list(map(int, input().split())) dp = [0] * N for i in range(1): f..

BOJ/Python 2022.04.22

백준 11399번 ATM 파이썬

https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 내 답안 N = int(input()) p = sorted(list(map(int, input().split()))) result = 0 while N != 0: result += p[len(p)-N] * N N -= 1 print(result) 인출이 가장 빠르게 되는 사람 순으로 정렬을 하는 게 핵심 아이디어이다. 예제로 주어진 문제를 풀어본다면 1 1+2 1+2+3 1+2+3+3 1+2+3+3+4 이런 식으로 나타낼 수 ..

BOJ/Python 2022.04.17

백준 1181번 단어 정렬 파이썬

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 내 답안 import sys input = sys.stdin.readline x = list(set([input().rstrip() for _ in range(int(input().rstrip()))])) x.sort() x.sort(key = len) for i in x: print(i) N 개의 단어는 리스트 컨프리헨션으로 간단히 받았다. list(set( [] )) 를 한 이유는 ..

BOJ/Python 2022.04.11

백준 12865번 평범한 배낭 파이썬

https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 내 답안 import sys input = sys.stdin.readline N, K = map(int, input().rstrip().split()) dp = [0] * (K + 1) for _ in range(N): W, V = map(int, input().rstrip().split()) for i in range(K, W -..

BOJ/Python 2022.03.31