
https://www.acmicpc.net/problem/7489 7489번: 팩토리얼 n!은 정수 n에 대한 팩토리얼 수를 나타내는데, 이는 1부터 n까지의 모든 정수의 곱을 의미한다. 팩토리얼은 굉장히 빨리 커지기 때문에 13!는 대부분의 컴퓨터에서 32비트 정수형을, 70!은 대부분 www.acmicpc.net 난이도 : 브론즈 2 태그 : 수학, 임의 정밀도 / 큰 수 연산 설명 팩토리얼은 매우 빠른 속도로 커져 순식간에 오버플로우가 발생합니다. 그러나, 그렇다고 해서 BigDecimal을 사용하기엔 메모리와 시간을 초과할 것이 분명합니다. 자세히 보니, 0이 아닌 최우측 수를 출력하는 문제이네요. 매 연산마다 최우측 수가 0이 아닐 때 까지 10으로 나눠주면 되겠네요. 소스코드 fun main(..

https://www.acmicpc.net/problem/16486 16486번: 운동장 한 바퀴 첫째 줄에 d1의 값이 주어진다. 둘째 줄에는 d2의 값이 주어진다. (d1, d2의 값은 100,000 이하의 양의 정수) www.acmicpc.net 난이도 : 브론즈 4 태그 : 수학, 기하학 설명 사각형의 가로 길이와 반지름의 길이가 주어집니다. 그냥 단순히 사각형 가로 길이 * 2 + 원의 둘레 (지름 * pi) 를 하면 나오겠죠? 소스코드 #define _CRT_SECURE_NO_WARNINGS #include int main() { int d1, d2; double pi = 3.141592; scanf("%d", &d1); scanf("%d", &d2); printf("%f", d1 * 2 + ..

https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 난이도 : 브론즈 1 태그 : 수학, 정수론, 소수 판정 설명 N에 대해 소인수분해를 하는 문제입니다. 소인수분해 과정은 꽤 간단합니다. 60을 소인수분해 한다 했을때, 60 / 2 = 30 이며, 30 / 2 = 15 입니다. 2로는 더 이상 나눠지지 않으니 3으로 나눠봅시다. 15 / 3 = 5 이며, 더 이상 3으로 나누어지지 않고, 4로도 나누어지지 않습니다. 5 / 5 = 1 입니다. 이와 같이 60을 소인수분해 하면 2 * 2 * 3 * 5 = 60을 구할 수 있습니다. 소스코드 fun main() { v..

https://www.acmicpc.net/problem/2753 2753번: 윤년 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 www.acmicpc.net 난이도 : 브론즈 5 태그 : 수학, 구현, 사칙연산 설명 if문을 배울 때 한 번씩은 배우는 윤년 판단 문제입니다. 4로 나뉘면서 100으로 나뉘지 않거나, 400으로 나뉘면 그 해는 윤년입니다. 소스코드 public class 윤년 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int nu..

https://www.acmicpc.net/problem/2010 2010번: 플러그 첫째 줄에 멀티탭의 개수 N이 주어진다. (1 ≤ N ≤ 500,000) 이어서 둘째 줄부터 N개의 줄에 걸쳐 각 멀티탭이 몇 개의 플러그를 꽂을 수 있도록 되어 있는지를 나타내는 자연수가 주어진다. 이 자연 www.acmicpc.net 난이도 : 브론즈 3 태그 : 수학, 사칙연 설명 멀티탭의 1개의 구멍은 다음 플러그를 연결할 때 사용합니다. 따라서, 마지막 1개의 멀티탭을 제외한 각 멀티탭은 1개씩 줄여 플러그를 세고, 결과값에 +1 만큼 하여 출력하면 됩니다. 소스코드 fun main() { var result = 0 repeat(readln().toInt()) { result += readln().toInt()..

https://www.acmicpc.net/problem/24389 24389번: 2의 보수 컴퓨터는 뺄셈을 처리할 때 내부적으로 2의 보수를 사용한다. 어떤 수의 2의 보수는 해당하는 숫자의 모든 비트를 반전시킨 뒤, 1을 더해 만들 수 있다. 이때, 32비트 기준으로 처음 표현했던 수와 www.acmicpc.net 난이도 : 브론즈 1 태그 : 수학, 비트마스킹 설명 컴퓨터가 음수를 표현하는 방식중 하나인 2의 보수법에 관한 문제입니다. 10진수가 입력되면 이를 2진수로 바꾸고, 1을 0으로, 0을 1로 반전시킨 후, 1을 더해 구할 수 있습니다. 소스코드 #include int main() { int bit[32] = {0}; int bitReversed[32] = {0}; int n; scanf(..

https://www.acmicpc.net/problem/3595 3595번: 맥주 냉장고 맥주를 좋아하는 창영이는 냉장고에 맥주를 보관한다. 일반 냉장고에 음식과 맥주를 함께 보관하다보니 창영이의 냉장고에는 맥주를 넣을 곳이 점점 없어지고 있었다. 창영이는 맥주 전용 냉장 www.acmicpc.net 난이도 : 브론즈 2 태그 : 수학, 브루트포스 설명 a * b * c = n을 만족하는 abc중, 겉넓이가 가장 작은 값들을 찾는 문제입니다. 뭔가 수학적으로 효율적으로 찾을 수 있지 않을까... 고민하다가 그냥 맘 편하게 브루트포스로 했습니다. 소스코드 #include int main() { int n; scanf("%d", &n); long min = 987654321; int num[3] = {0,..

https://www.acmicpc.net/problem/2057 2057번: 팩토리얼 분해 음 아닌 정수 N이 주어졌을 때, 이 수를 서로 다른 정수 M(M ≥ 1)개의 팩토리얼의 합으로 나타낼 수 있는지 알아내는 프로그램을 작성하시오. 예를 들어 2=0!+1!로 나타낼 수 있지만, 5는 이와 같은 www.acmicpc.net 난이도 : 실버 5 태그 : 수학, 그리디 알고리즘, 브루트포스 알고리즘 설명 정수 n이 주어졌을 때, 서로 다른 팩토리얼로 나타낼 수 있으면 YES, 아니면 NO를 출력하는 문제입니다. 정수 145이 있습니다. 145이하의 팩토리얼 중 가장 작은 팩토리얼은 5! (5*4*3*2 = 120)입니다. 4!을 볼까요? 4*3*2 = 24로, 120 + 24 = 144로, 145보다 ..

https://www.acmicpc.net/problem/2909 2909번: 캔디 구매 오늘은 화이트데이이다. 상근이는 여자친구를 위해서 사탕을 사려고 한다. 하지만, 상근이는 독특한 성격을 가지고 있어서, 특정 액면가의 지폐만 가지고 있는다. 또, 거스름돈은 받지 않는다. www.acmicpc.net 난이도 : 브론즈 2 태그 : 수학, 구현 설명 단순히 자리수에 반올림을 처리하면 되는 문제이지만, 파이썬으로 반올림을 할 경우 한가지 주의할 점이 있습니다. 일반적으로 사용하는 5 이상이면 올림, 4이하면 내림하는 방식을 사사오입이라 합니다. 하지만 파이썬은 오사오입 방식을 사용하는데, 5보다 크면 올리고, 5보다 작으면 내리고, 5일 경우, 앞자리가 홀수면 올림, 앞자리가 짝수면 내림하는 방식입니다...

https://www.acmicpc.net/problem/2520 2520번: 팬케이크 사랑 첫 번째 테스트 케이스에서 주어진 재료를 가지고 바나나 팬케익 10개, 딸기 팬케익 1개, 초콜릿 팬케익 4개, 호두 팬케익 1개를 만들 수 있다. 두 번째 테스트 케이스에서 주어진 재료 중 밀 www.acmicpc.net 난이도 : 브론즈 2 태그 : 수학, 구현, 사칙연산 설명 우유 8컵, 계란 노른자 8개, 설탕 4스푼, 소금 1스푼, 밀가루 9컵이 있으면 팬케이크 반죽 16개를 만들 수 있습니다. 즉, 반죽 1개당 우유 0.5개, 노른자 0.5개, 설탕 0.25스푼, 소금 0.0625스푼, 밀가루 0.5625컵 필요합니다. 우유, 계란, 설탕, 소금, 밀가루가 각각 16, 16, 8, 2, 17만큼 있을 ..