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에 있는 문자열을 정수형으로 바꿔주며 더해주면 된다.
10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 풀이 import sys input= sys.stdin.readline t = input() a = list(map(int,input().rstrip().split())) print(min(a),max(a)) 가장 간단하게 생각하면 그냥 min, max 함수를 쓰면 된다. 그런데 이렇게 한다면 정말 기적적으로 연산속도가 느려지는 걸 볼 수 있다. 왜일까? 이는 파이썬이 인터프리터 언어기 때문에 min과 max를 계산할 때 전부 ..
10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 풀이 s = input() for i in range(97,123): print(s.find(chr(i)),end =' ') chr 함수는 숫자 i가 주어졌을 때 아스키 코드에 해당하는 알파벳을 반환한다. find 메소드는 해당 문자열에서 몇 번째에 있는지 인덱스를 반환한다. (없다면 -1을 반환) 주어지는 알파베시 전부 소문자이므로, 아스키 코드는 97부터 123이다. 따라서 위와 같이 find(문자열(아스키 코드 97~123))을 대조해서 출력해주..