[2798] Q : 변형된 블랙잭을 한다. 각 카드에는 양의 정수가 쓰여있다. 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그리고 딜러는 숫자 M을 말한다. 플레이어는 제한된 시간 안에 N장의 카드 중 3장의 카드를 골라야 한다. 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. 첫 줄에는 N과 M이 공백을 두고 입력된다. 둘째 줄에는 카드에 쓰여 있는 수들이 주어진다. 첫 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력해라.
A :Brute force는 '무식한 힘'이라는 뜻이다. 가능한 모든 경우를 탐색하는 알고리즘으로 생각할 수 있다.
[2231] Q : 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 245+2+4+5=256이 된다. 따라서 245는 256의 생성자이다. 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러개인 자연수도 있을 수 있다. 입력으로 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성해라. 생성자가 없는 경우에는 0을 출력한다.
A :굳이 line 3~7까지의 과정이 아니라, sum = i + sum(list(map(int,str(i))))로 한 번에 쓸 수 있다. 그 다음에 판별하는 곳으로 갈 수 있다.
[7568] Q : 어떤 사람의 몸무게가 x kg, 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A와 B의 덩치가 각각 (x,y), (p,q)라고 할 때, x>p, y>q라면 A의 덩치가 B의 덩치보다 크다고 한다. 하지만 A가 키는 크지만 몸무게는 작은 경우, 덩치를 가릴 수 없다. N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 큰 덩치를 가진 사람의 수로 정해진다. 자신보다 덩치가 큰 사람이 k명이라면 그 사람의 덩치 등수는 k+1등이 된다. 이렇게 하면 같은 덩치 등수를 가진 사람은 여러명도 가능하다. 첫 줄에는 전체 사람의 수 N이 주어진다. 그리고 N줄에는 각 사람의 몸무게와 키를 나타내는 양의 정수 x와 y가 하나의 공백을 두고 각각 나타난다. 나열된 사람의 순서대로 덩치 등수를 구해서 공백을 두고 출력해라.
A :line 2,3같이 몸무게와 키 list를 별도로 만드는 것이 아니라, student = []로 두고, line 7,8대신 student.append((x,y))로 할 수도 있다. 그리고 line 10대신 for i in student: z = 1 for j in student:로 두고, line 13을 if (i[0]<j[0] and i[1]<j[1])로 쓴다면 2차원 배열꼴로 굳이 안써도 된다.
[1018] Q : M*N개의 단위 정사각형으로 나뉘어 있는 M행 N열 크기의 판을 찾았다. 각 정사각형은 B나 W로 칠해져 있다. 이 판을 잘라 8x8 크기의 체스판을 만들려 한다. 체스판은 B와 W가 번갈아 칠해져 있어야 한다. 각 칸이 B나 W 중 하나로 칠해져 있고, 변을 공유하는 두 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 체스판을 칠하는 경우는 두가지 뿐이다. 맨 왼쪽 위칸이 B인 것과, W인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 8x8 크기의 체스판으로 잘라낸 후 몇 개의 정사각형을 다시 칠하려 한다. 물론 8x8 크기는 아무데서나 골라도 된다. 다시 칠해야 하는 정사각형의 최소 개수를 구해라. 입력으로는 첫째 줄에 M과 N이 공백을 두고 주어진다. 둘째 줄부터 M개의 줄에는 보드의 각 행의 색이 주어진다. 다시 칠해야 하는 정사각형 개수의 최솟값을 출력해라.
A :
[1436] Q : 종말의 숫자란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로는 1666,2666,3666...이 있다. N이 입력으로 주어졌을 때, N번째 종말의 수를 출력해라.
A : 6 3개가 연속되어 나오지만 중복되어 cnt가 +1되는 경우가 있어서 잘 풀리지 않았지만, line 6처럼 쓰면 중복을 피할 수 있다. num에 숫자가 어떤 배열로 오던(66666이던 66616이던) '666'이 num에 있기만 하면 모두 cnt가 1만 증가한다. 처음에는 line 6에서 num을 list로 만들어 풀려고 했었는데, 굳이 안그러고 str로 바꿔도 된다. list로 바꾸려면 list(map(int,num))으로 바꿔야 한다.