#include <iostream>
using namespace std;
bool hansoo(int i)
{
if (i < 100)
return true;
int a = i / 100;
int b = i / 10 % 10;
int c = i % 10;
if (a+c == 2*b)
{
return true;
}
return false;
}
int main(void)
{
int N = 0;
int count = 0;
cin >> N;
if (N>=1 and N<=1000) // Initial condition
{
for (int i=1; i<=N; i++)
{
if(hansoo(i))
count = count + 1;
}
cout << count << endl;
}
return 0;
}
N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
S = 0
A = sorted(A)
B = sorted(B, reverse=True)
for idx in range(N):
s = A[idx] * B[idx]
S = S + s
print (S)
파이썬 내장함수 sorted를 이용해서 풀었다. 편리하게 사용 후 지적 태만감을 느낀다. 파이썬으로 어느정도 백준 문제 풀이에 익숙해지면 C++로 다시 풀 예정이다.
네 번 중첩되는 for 문이 사용될까 싶었는데 사용된다. 앞으로 브루트포스 문제를 만날 때면 시간 복잡도가 높아지는 것에 대해서 심적 부담감을 조금 내려 놓아 봐야 겠다.
N, M = list(map(int, input().split()))
chessboard = []
counts = []
for i in range(N):
value = input()
if len(value) != M:
raise ValueError('Check size of chessboard')
chessboard.append(value)
#print (chessboard)
for x in range(0, N - 8 + 1): # Abstract
for y in range(0, M - 8 + 1): # Abstract
white_start, black_start = 0, 0
for i in range(x, x + 8): # Concrete
for j in range(y, y + 8): # Concrete
if (i + j) % 2 == 0:
if chessboard[i][j] != "W":
white_start +=1
if chessboard[i][j] != "B":
black_start +=1
elif (i + j) % 2 == 1:
if chessboard[i][j] != "B":
white_start +=1
if chessboard[i][j] != "W":
black_start +=1
counts.append(white_start)
counts.append(black_start)
print (min(counts))
def factorial(N):
if N > 1:
return (N * factorial(N-1))
else:
return 1
T = int(input())
for _ in range(T):
N, M = list(map(int, input().split()))
print (factorial(M) // (factorial(M-N) * factorial(N)))
2. 다이나믹 프로그래밍 적용 O
T = int(input())
dp = [[0] * 30 for _ in range(30)]
for i in range(30):
for j in range(30):
if i == 1:
dp[i][j] = j
else:
if i == j:
dp[i][j] = 1
elif i < j:
dp[i][j] = dp[i-1][j-1] + dp[i][j-1]
for _ in range(T):
N, M = list(map(int, input().split()))
print (dp[N][M])