2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 풀이 import sys from itertools import combinations n,M=map(int,sys.stdin.readline().split()) li=map(int,sys.stdin.readline().split()) b=0 a=list(map(sum,list(combinations(li,3)))) a.sort() for i in a: if i>M: b=a.index(i) break print(a[b-1]) 필자..
2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 풀이 import sys x=int(sys.stdin.readline().rstrip()) ans=[] x1 = x while (x): if x + sum(map(int,str(x))) == x1: ans.append(x) x-=1 if ans!=[]: print(min(ans)) else: print(0) 필자가 머리를 쥐어짜낸 풀이는 다음과 같다. 기본적인 원리는 자연수 n에서 계속 -1을 하며 x를 전부 대입해보며, 분해합인지 ..
4153번: 직각삼각형 입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다. www.acmicpc.net 풀이 import sys a,b,c=list(map(int,sys.stdin.readline().split())) while a!=0 and b!=0 and c!=0: if (a**2)+(b**2)==c**2 or (b**2)+(c**2)==a**2 or (a**2)+(c**2)==b**2: print('right') else: print('wrong') a,b,c=list(map(int,sys.stdin.readline().split())) 직각삼각형의 기본공식은 A^2+B^..
11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 풀이 t =int(input()) a= list(input()) s=0 for i in a: s+=int(i) print(s) 입력을 받을 때, list로 입력을 받게 되면 숫자들이 쪼개지며 문자열 형태로 바뀐다. 이를 이용해서 a에 있는 문자열을 정수형으로 바꿔주며 더해주면 된다.