BOJ 180

백준 1541번 잃어버린 괄호 파이썬

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 내 답안 x = input().rstrip().split('-') result = [sum(map(int, i.split('+'))) for i in x] print(result[0] - sum(result[1:])) REVIEW 문제를 보면서 어떻게 하면 잘 계산을 할 수 있을까 고민을 하였다. 내가 생각한 순서는 이렇다. 1번 "-" 단위로 끊어서 리스트를 만든다. -> ["55", "5..

BOJ/Python 2022.12.02

백준 2193번 이친수 파이썬

https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 내 답안 import sys input = sys.stdin.readline dp = [0] * 91 dp[0] = dp[1] = 1 N = int(input()) if N < 3: print(dp[N-1]) else: for i in range(N-2): dp[i+2] = dp[i+1] + dp[i] print(dp[N-1]) REVIEW 6자릿수까지 노가다 했는데, 결론은 규칙이 있..

BOJ/Python 2022.09.20

백준 9461번 파도반 수열 파이썬

https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 내 답안 import sys input = sys.stdin.readline dp = [0] * 101 dp[0] = dp[1] = dp[2] = 1 for i in range(int(input())): n = int(input()) if n < 3: print(dp[n]) else: for i in range(n-2): dp[i+3] = dp[i] + dp[i+1] print(dp[n-1]) REVI..

BOJ/Python 2022.09.19

백준 1932번 정수 삼각형 파이썬

https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 내 답안 import sys input = sys.stdin.readline n = int(input()) dp = [list(map(int,input().split())) for i in range(n)] for i in range(n-1, 0, -1): for j in range(i): dp[i-1][j] += max(dp[i][j], dp[i][j+1]) print(dp[0][0]) Review 맨 아래서부터 둘 중의 한값중 큰 값을 그 윗 값에 더하는 것을 반복..

BOJ/Python 2022.09.18

백준 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