목록분류 전체보기 (171)
이호진
문제 설명 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로..
문제 설명 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. 풀이 생성자는 자신의 값 + 각 자리수의 합이기 때문에 N 보다 커지지 않는다. 따라서 for문을..
문제 설명 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 주어졌을 ..
문제설명 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오. 첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다. 첫째 줄에 n번째 피보나치 수를 출력한다. 풀이 피보나치 수열은 일반적으로 함수를 이용해서 재귀를 이용하게되면 숫자가 10만 되어도 시간이 엄청..
오늘부터 백준 온라인 저지 단계별로풀어보기를 다시 시작하기로 했다. 문제 설명 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 첫째 줄에 정수 N(0 ≤ N ≤ 12)가 주어진다. 첫째 줄에 N!을 출력한다. 풀이 for문과 dp배열을 이용하여 어렵지 않게 풀 수 있다. dp값에 현재의 값을 저장하고 곱할 땐, for문에서 i와 이전 값을 곱해서 저장한다. dp=[0]*13 dp[0]=1 dp[1]=1 dp[2]=2 n=int(input()) for i in range(3,n+1): dp[i]=dp[i-1]*i print(dp[n])
T = int(input()) for test_case in range(1, T + 1): n=int(input()) num=[] for i in range(len(str(n))): num.append(str(n)[i]) num=list(set(num)) temp=1 while len(num)!=10: temp+=1 for i in range(len(str(n*temp))): num.append(str(n*temp)[i]) num=list(set(num)) print('#%d %d'%(test_case,temp*n))
T = int(input()) for test_case in range(1, T + 1): money=[0]*8 arr=[50000,10000,5000,1000,500,100,50,10] n=int(input()) count=0 for i in range(len(arr)): count=n//arr[i] money[i]=count n%=arr[i] print('#{}'.format(test_case)) print(*money)
T = int(input()) for test_case in range(1, T + 1): arr=input() result=[] for i in arr: if i.isalpha(): result.append(i) flag=1 for i in range(int(len(result)/2)): if result[i]!=result[-i-1]: flag=0 print('#%d %d'%(test_case,flag))
T = int(input()) for test_case in range(1, T + 1): n,m=map(int,input().split()) graph=[] for i in range(n): graph.append(list(map(int,input().split()))) count=0 for i in range(n): current=0 for j in range(n): if graph[i][j]==1: current+=1 if graph[i][j]==0 or j==n-1: if current==m: count+=1 current=0 for j in range(n): if graph[j][i]==1: current+=1 if graph[j][i]==0 or j==n-1: if current==m: cou..
T = int(input()) for test_case in range(1, T + 1): n,m=map(int,input().split()) graph=[] for i in range(n): graph.append(list(map(int,input().split()))) mx=0 for i in range(n-m+1): for j in range(n-m+1): c=0 for k in range(m): for l in range(m): c+=graph[j+l][i+k] if c>mx: mx=c print('#%d %d'%(test_case,mx))