수학
-
[백준] 10707 수도요금 with PythonPS 2023. 4. 10. 17:05
📌 BOJ 10707 수도요금 💡 조건 JOI군이 살고 있는 지역에는 X사와 Y사, 두 개의 수도회사가 있다. 두 회사의 수도요금은 한 달간 수도의 사용량에 따라 (2)번과 같이 정해진다. X사 : 1리터당 A엔. Y사 : 기본요금은 B엔이고, 사용량이 C리터 이하라면 요금은 기본요금만 청구된다. 용량이 C리터가 넘었을 경우 기본요금 B엔에 더해서 추가요금이 붙는다. 추가요금은 사용량이 C리터를 넘었을 경우 1리터를 넘었을 때마다 D엔이다. JOI군의 집에서 한 달간 쓰는 수도의 양은 P리터이다. 수도요금이 최대한 싸게 되도록 수도회사를 고를 때, JOI군의 집의 1달간 수도요금을 구하여라. 입력되는 정수 A,B,C,D,P는 전부 1 이상 10000 이하이다. 수학, 사칙연산 유형의 문제 🔖 예제 및 실..
-
[백준] 15792 A/B - 2 with PythonPS 2023. 4. 10. 13:03
📌 BOJ 15792 A/B - 2 💡 조건 두 정수 A와 B를 입력받은 다음, A/B 의 값을 출력하는 문제. 첫째 줄에 A와 B가 주어진다. (0 < A, B ≤ 10,000) 이 문제는 서브태스크가 있다. 구현, 수학 유형의 문제 🔖 예제 및 실행결과 예제 1 1 3 실행결과 1 0.33333333333333333333333333333333 예제 2 4 5 실행결과 2 0.8 ⌨️ 문제 풀이 해당 문제의 서브태스크 10번을 보면, 절대/상대 오차 허용 범위가 10**-1000 이다. 이는 소수점 1000자리까지의 수의 오차범위를 허용해준다는 것이니, 이를 생각하고 구현을 하면된다. 실수에는 정수부와 소수부가 있다. 이를 따로 나누어 계산을 해주고 문자열로 붙여서 출력하면 편하다. 🖥 소스 코드 fr..
-
[백준] 2455 지능형 기차 with PythonPS 2023. 4. 10. 11:36
📌 BOJ 2455 지능형 기차 💡 조건 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. 이 장치를 이용하여 출발역에서 종착역까지 가는 도중 기차 안에 사람이 가장 많을 때의 사람 수를 계산하려고 한다. 기차를 이용하는 사람들은 질서 의식이 투철하여, 역에서 기차에 탈 때, 내릴 사람이 모두 내린 후에 기차에 탄다고 가정한다. 이 기차는 다음 조건을 만족하면서 운행된다고 가정한다. 기차는 역 번호 순서대로 운행한다. 출발역에서 내린 사람 수와 종착역에서 탄 사람 수는 0이다. 각 역에서 현재 기차에 있는 사람보다 더 많은 사람이 내리는 경우는 없다. 기차의 정원은 최대 10,000명이고, 정원을 초과하여 타는 경우는 없다. 4개의 역에 대해 기차에서 내린 사람 수와 탄 사람 수가..
-
[백준] 1072 게임 with PythonPS 2023. 4. 7. 15:18
📌 BOJ 1072 게임 💡 조건 형택이는 잠시 코딩을 하는 사이에 자신의 게임 실력이 눈에 띄게 향상된 것을 알았다. 형택이는 앞으로의 모든 게임에서 지지 않는다. 형택이는 게임 기록을 삭제 할 수 없기 때문에, 자신의 예전 기록이 현재 자신의 엄청난 실력을 증명하지 못한다고 생각했다. 게임 기록은 다음과 같이 생겼다. 게임 횟수 : X 이긴 게임 : Y (Z%) Z는 형택이의 승률이고, 소수점은 버린다. 예를 들어, X=53, Y=47이라면, Z=88이다. X와 Y가 주어졌을 때, 형택이가 게임을 최소 몇 번 더 해야 Z가 변하는지 구하는 문제 첫째 줄에 형택이가 게임을 최소 몇 판 더 해야하는지 출력한다. 만약 Z가 절대 변하지 않는다면 -1을 출력한다. 1 ≤ X ≤ 1,000,000,000 0 ..
-
[백준] 1789 수들의 합 with PythonPS 2023. 4. 3. 16:26
📌 BOJ 1789 수들의 합 💡 조건 서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까? 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. 첫째 줄에 자연수 N의 최댓값을 출력한다. 수학, 그리디 알고리즘 유형의 문제 🔖 예제 및 실행결과 예제 1 200 실행결과 1 19 ⌨️ 문제 풀이 계산하고 있는 계산값(A), 정답(B), 더할 수(C)를 각각 변수로 만든다. while를 이용해 반복적인 계산을 한다. A += C 후, C += 1, B += 1 (2)번의 반복문은 A가 입력 받은 S 보다 작을때만 반복한다. while 의 조건에 해당되지 않아 반복문이 종료되었으면 조건에 맞게 출력한다. 만약 A가 S와 값이 같다면 ans를, 그게..
-
[백준] 5692 팩토리얼 진법 with PythonPS 2023. 4. 3. 16:04
📌 BOJ 5692 팩토리얼 진법 💡 조건 팩토리얼 진법에서는 i번 자리의 값을 ai×i!로 계산한다. 즉, 팩토리얼 진법에서 719는 10진법에서 53과 같다. 그 이유는 7×3! + 1×2! + 9×1! = 53이기 때문이다. 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 최대 5자리인 팩토리얼 진법 숫자가 주어진다. 입력의 마지막 줄에는 0이 하나 주어진다. 각 테스트 케이스에 대해서, 입력으로 주어진 팩토리얼 진법 숫자를 10진법으로 읽은 값을 출력한다. 수학 유형의 문제 🔖 예제 및 실행결과 예제 1 719 1 15 110 102 0 실행결과 1 53 1 7 8 8 ⌨️ 문제 풀이 입력 받은 숫자를 문자열로 변경한 뒤, 길이(l)를 구한다...
-
[백준] 1676 팩토리얼 0의 개수 with PythonPS 2023. 4. 1. 22:49
📌 BOJ 1676 팩토리얼 0의 개수 💡 조건 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하는 문제. 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) 수학 유형의 문제 🔖 예제 및 실행결과 예제 1 10 실행결과 1 2 예제 2 3 실행결과 2 0 ⌨️ 문제 풀이 리스트에 팩토리얼 계산 값을 미리 넣어놓으면 쉽게 해결할 수 있다. N에 해당하는 값을 꺼내 맨 우측부터 좌측 방향으로 이동하며 0이 아닌 수가 나올 때까지 0의 개수가 몇 개인지 세면 된다. 🖥 소스 코드 from sys import stdin arr = [1, 2, 6, 24, 120] n = int(stdin.readline()) if n < 5: print(0) else: for i i..
-
[백준] 1722 순열의 순서 with PythonPS 2022. 8. 9. 17:18
📌 BOJ 1722 순열의 순서 💡 조건 1부터 N까지의 수를 임의로 배열한 순열은 총 N! = N×(N-1)×…×2×1 가지가 있다. 임의의 순열은 정렬을 할 수 있다. 예를 들어 N=3인 경우 {1, 2, 3}, {1, 3, 2}, {2, 1, 3}, {2, 3, 1}, {3, 1, 2}, {3, 2, 1}의 순서로 생각할 수 있다. N이 주어지면, 아래의 두 소문제 중에 하나를 풀어야 한다. k가 주어지면 k번째 순열을 구하고, 임의의 순열이 주어지면 이 순열이 몇 번째 순열인지를 출력하는 문제 첫째 줄에 N(1 ≤ N ≤ 20)이 주어진다. 1인 경우 k(1 ≤ k ≤ N!)를 입력받고, 2인 경우 임의의 순열을 나타내는 N개의 수를 입력받는다. N개의 수에는 1부터 N까지의 정수가 한 번씩만 나..
-
[백준] 1081 합 with PythonPS 2022. 7. 22. 20:06
📌 BOJ 1081 합 💡 조건 L보다 크거나 같고, U보다 작거나 같은 모든 정수의 각 자리의 합을 구하는 문제. 0 ≤ L ≤ U ≤ 2,000,000,000 수학 유형의 문제 🔖 예제 및 실행결과 예제 24660 308357171실행결과 11379854844⌨️ 문제 풀이 가장 먼저 문제를 보며 주목해야할 부분은 L과 U의 범위이다. L과 U의 범위는 최대 20억까지로, 일일히 검사했을 때 최악의 경우에는 0부터 20억까지의 모든 수를 검사해야하기 때문에 문제에서 주어진 2초라는 시간 안에 절대 해결할 수가 없다. (1)번에서 정리한대로, 우리는 L과 U의 범위를 입력받아 일일히 숫자 하나씩 검사하는 방법을 피해 각 숫자의 자릿수를 더해 답을 출력해야 한다. L, U 를 입력받아 L보다 크거나 같고..