https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 알고리즘 분류 : 브루트 포스 1 : for문 중첩을 이용한 풀이(124ms) N, M = map(int, input().split()) lst = list(map(int, input().split())) nlst = [] for i in range(N): for j in range(i+1, N): for k in range(j+1, N): three = lst[i..
https://www.acmicpc.net/problem/2775 2775번: 부녀회장이 될테야 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다 www.acmicpc.net 알고리즘 분류 : 수학, 구현 문제의 설명을 그림으로 나타내면 다음과 같다. 1층의 2호실에 있는 사람의 수는 0층의 1, 2호실 사람들의 수와 같다. 2층 3호실에 있는 사람의 수는 1층의 1, 2, 3호실 사람들의 수와 같다. 0층의 인원들을 리스트로 나타내면 다음과 같을 것이다. lst = [1, 2, 3, 4] 몇층이 되던간에 lst[0] = 1로 동일한 반면, 다음 층의 lst[1]은 이전층의 lst[1] + lst[0]의 값과..
https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 알고리즘 분류 : 수학 풀이 1 : 육각형 단위로 구분하기 그림을 중앙을 중심으로 하는 여러개의 육각형의 형태로 나누어 보자. 중심에 있는 육각형은 1, 그 다음으로 큰 육각형은 1~7까지, 그 다음으로 큰 육각형은 1~19까지, 그 다음은 1~37까지, 그 다음은 1~61까지의 숫자로 이루어져 있다. 이렇게 나누어진 범위를 활용하면 쉽게 문제를 풀 수 있다. 예를들어 13의 경우, 3번째 육각형의 범위에..
https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 알고리즘 분류 : 브루트포스 분해합 : 어떤 수 N과 N의 각 자리수를 모두 더한 값의 합. 생성자 : 어떤 자연수 M의 분해합이 N인 경우, M을 N을 N의 생성자라 한다. ex) 245 -> 245 + 2 + 4 + 5 = 256 245는 256의 생성자. 256은 245의 분해합. 자연수 N을 입력했을 때, N의 가장 작은 생성자를 구하는 프로그램을 작성하자. 접..
https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 풀이 1 : 아스키코드 변환, count와 index함수를 이용한 풀이 S = input() arr = [0]*26 max_num = 0 index = 0 for i in range(len(S)): if ord(S[i]) >= 97: arr[ord(S[i])-32-65] += 1 else : arr[ord(S[i])-65] += 1 max_num = max(arr) index = arr.index(max_num) if arr.co..
https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 풀이 1 : 아스키 코드를 이용한 방법 S = input() arr = [] for i in range(26): arr.append(-1) for i in range(len(S)): if arr[ord(S[i]) - 97] == -1: arr[ord(S[i]) - 97] = i for i in arr: print(i, end = ' ') 처음에 26가지 값을 -1로 설정하고 ord()..