본문 바로가기
반응형

프로그래밍501

C# [백준 BAEKJOON] 2981번 검문 문제 트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 시간을 때우기 위해서 수학 게임을 하기로 했다. 먼저 근처에 보이는 숫자 N개를 종이에 적는다. 그 다음, 종이에 적은 수를 M으로 나누었을 때, 나머지가 모두 같게 되는 M을 모두 찾으려고 한다. M은 1보다 커야 한다. N개의 수가 주어졌을 때, 가능한 M을 모두 찾는 프로그램을 작성하시오. 입력 첫째 줄에 종이에 적은 수의 개수 N이 주어진다. (2 ≤ N ≤ 100) 다음 줄부터 N개 줄에는 종이에 적은 수가 하나씩 주어진다. 이 수는 모두 1보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다. .. 2024. 3. 22.
C# [백준 BAEKJOON] 2501번 약수 구하기 문제 어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다. 6을 예로 들면 6 ÷ 1 = 6 … 0 6 ÷ 2 = 3 … 0 6 ÷ 3 = 2 … 0 6 ÷ 4 = 1 … 2 6 ÷ 5 = 1 … 1 6 ÷ 6 = 1 … 0 그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다. 두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다. 출력 첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력.. 2024. 3. 21.
C# list 랜덤(random) 하게 섞기 C#에서 Linq로 랜덤 하게 섞기 list의 요소들을 랜덤 하게 섞고 싶을 때 Linq OrderBy()에서 random 객체의 Next()를 호출하면 간단하게 해당 요소들을 섞을 수 있다. using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { var list = new List() { 1, 2, 3, 4, 5 }; var random = new Random(); var randomized = list.OrderBy(x => random.Next()); foreach (var i in randomized) { Console.WriteLine(i); .. 2024. 3. 21.
정수의 기하학적인 성질 삼각수(triangular number) 삼각수는 첫 n 개의 양의 정수를 나타내는 행들을 쌓아서 만들 수 있는데 기하학적으로 다음과 같은 패턴을 따른다. n 번째 삼각수에 이전 삼각수인 n - 1번째 삼각수를 붙이면 정사각수(square number)가 된다. n 번째 삼각수에 자기 자신을 붙이면 직사각수(oblong number)가 된다. $$ \Box_n = n(n + 1) $$ 또한 위 두 그림을 비교해 보면 각각의 직사각수는 같은 수에 대응되는 삼각수의 두 배라는 것을 알 수 있다. 삼각수는 첫 n 개의 양의 정수의 합이므로 다음과 같은 식이 성립된다. $$ \Box_n = 2\triangle_n = 2\sum_{i=1}^n i = n(n + 1) $$ 따라서 위와 같은 기하학적인 결과로부터 양.. 2024. 3. 19.
일반 더하기 곱셈 vs 고대 이집트 곱셈법 곱셈을 덧셈으로 만약 곱셈을 할 줄 모르는 상태에서 a * 8을 구해야 한다고 해보자. 곱셈을 모르기 때문에 a + a + a + a + a + a + a + a 이렇게 계산하면 원하는 결과를 얻을 수 있다. 다만 이렇게 하면 덧셈을 7번이나 해야 한다. 그런데, a + a를 일단 계산하면 2a를 알 수 있으므로 결국 2a + 2a + 2a + 2a를 계산하면 된다. 이를 확장해 보면 8a = a + a + a + a + a + a + a + a = 2a + 2a + 2a + 2a = 4a + 4a = 8a 이 방법을 8a를 계산하면 다음과 같이 3회의 덧셈으로 계산이 끝난다. a + a 2a + 2a 4a + 4a 곱하는 수 8이 2의 거듭제곱의 형태이므로 23 = log28 = 3회의 덧셈으로 끝난 .. 2024. 3. 18.
C# 비트 연산자를 이용한 홀수짝수 판별, 절반으로 나누기 함수 구현 C# 비트 연산자(Bitwise Operator) 활용하기 using System; class Program { static void Main(string[] args) { var input = Console.ReadLine(); var num = Int32.Parse(input); Console.WriteLine($"{num} is {IsOdd(num)}"); Console.WriteLine($"{num} half = {Half(num)}"); } static string IsOdd(int n) { return (n & 1) == 0 ? "even" : "odd"; } static int Half(int n) { return n >> 1; } } 홀수 짝수 판별의 경우, 0001번째 자리와 비교해서 곱.. 2024. 3. 18.