[ 문제 ] 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 주어졌을..
Language
[ 문제 ] APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정의한다. 해시 함수는 무궁무진한 응용 분야를 갖는데, 대표적으로 자료의 저장과 탐색에 쓰인다. 이 문제에서는 여러분이 앞으로 유용하게 쓸 수 있는 해시 함수를 하나 가르쳐주고자 한다. 먼저, 편의상 입력으로 들어오는 문자열에는 영문 소문자(a, b, ..., z)로만 구성되어있다고 가정하자. 영어에는 총 26개의 알파벳이 존재하므로 a에는 1, b에는 2, c에는 3, ..., z에는 26으로 고유한 번호를 부여할 수 있다. 결과적으로 우리는 하나의 문자열을 수열로 변환할 수 있다. 예를 들어서 문자열 "a..
[ 문제 ] N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. [ 코드 ] using System.Text; StreamReader input = new StreamReader(new BufferedStream(Console.OpenStandardInput())); StreamWriter result = new StreamWriter(new BufferedStream(Console.OpenStandardOutput())); int n = int.Parse(input.ReadLine()); int[] arr = new int[10001]; for (int i = 0; i < n; i++) { int num = int.Parse(input.ReadLine()); arr[num]++..
[ 문제 ] N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. [ 코드 ] 1. HashSet 사용 using System.Text; StringBuilder sb = new StringBuilder(); int n = int.Parse(Console.ReadLine()); string[] A = new string[n]; A = Console.ReadLine().Split(); HashSet Aset = new HashSet(A); int m = int.Parse(Console.ReadLine()); string[] B = new string[m]; B = Console.ReadLine().Split(); foreach..
[ 문제 ] M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. [ 코드 ] using System.Text; string[] s = Console.ReadLine().Split(); int a = int.Parse(s[0]); int b = int.Parse(s[1]); int min = Math.Min(a, b); int max = Math.Max(a, b); StringBuilder sb = new StringBuilder(); for (int i = min; i
[ 문제 ] 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. [ 코드 ] string[] s = Console.ReadLine().Split(); int a = int.Parse(s[0]); int b = int.Parse(s[1]); Console.WriteLine(GCD(a, b)); Console.Write(LCM(a, b)); int LCM(int a, int b) { int result = (a * b) / GCD(a, b); return result; } int GCD(int a, int b) { while(b != 0) { int temp = b; b = a % b; a = temp; } return a; } [ 실행화면 ] 문제링크: https://w..