본문 바로가기
반응형

알고리즘24

[백준 / Python] 1431번 시리얼 번호 문제 https://www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어 www.acmicpc.net 시리얼번호 A가 시리얼번호 B의 앞에 오는 경우는 다음과 같다. A와 B의 길이가 다르면, 짧은 것이 먼저 온다. 만약 서로 길이가 같다면, A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다) 만약 1,2번 둘 조건으로도 비교할 수 없으면, 사전순으로 비교한다. 숫자가 알파벳보다 사전순으로 작다. 시리얼이 주어졌을 때, 정.. 2023. 10. 5.
[백준 / Python] 15651번 N과 M (3) 문제 https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 소스코드 N, M = map(int, input().split()) answer = [] def bt(cnt): if cnt == M: a = '' for i in answer: a += str(i) + ' ' print(a) return for i in range(1, N + 1): answer.append(i) bt(cnt + 1) answer.pop() bt(0) 백트래킹을 이용한 문.. 2023. 9. 17.
[백준 / Python] 3036번 링 문제 https://www.acmicpc.net/problem/3036 3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net 해결 코드 def gcd(a, b): if a < b: a, b = b, a # a가 크다 while True: if a % b == 0: return b else: a, b = b, a % b n = int(input()) data = list(map(int, input().split())) for i in range(1, n): tempgcd = gcd(data[0], data[i]) print('%s/%s' % (dat.. 2023. 9. 2.
[백준 / Python] 28293번 자릿수 문제 https://www.acmicpc.net/problem/28293 28293번: 자릿수 첫째 줄에 정수 $a$, $b$가 공백으로 구분되어 주어진다. $(1 \le a \le 10\,000; 1 \le b \le 10\,000\,000)$ $a^b$의 자릿수가 $10\,000$ 또는 $9,999$로 시작하지 않는 입력만 주어진다. www.acmicpc.net 해결 코드 import math a, b = map(int, input().split()) answer = math.log10(a) * b answer = int(answer) print(answer + 1) a^b의 자릿수를 구하는 문제이다. log10을 이용한다면 쉽게 풀 수 있다. 2023. 8. 8.
[백준 / Python] 28353번 고양이 카페 문제 https://www.acmicpc.net/problem/28353 28353번: 고양이 카페 첫째 줄에 정수 $N$과 $K$가 공백으로 구분되어 주어진다. $(1 \leq N \leq 5\,000;$ $1 \leq K \leq 10^9)$ 둘째 줄에는 각 고양이의 무게를 의미하는 $N$개의 정수 $w_1, w_2, \dotsm, w_N$이 공백으로 구분되어 주어 www.acmicpc.net 풀이 n, k = map(int, input().split()) data = list(map(int, input().split())) p1, p2 = 0, n - 1 data.sort() answer = 0 #p1이 작은쪽 p2가 큰쪽 while p1 < p2: if data[p1] + data[p2] 2023. 7. 22.
[백준 / Python] 11399번 ATM 문제 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 코드 n = int(input()) data = list(map(int, input().split())) data.sort() for i in range(1, n): data[i] = data[i - 1] + data[i] print(sum(data)) 풀이 모든 사람들의 기다리는 시간의 합을 최소로 하게 하려면 인출하는데 가장 적은 시간이 걸리는 사람이 먼저 ATM을 사용하면 된다. ex. 2명일때 ATM 5분 걸리는 .. 2023. 5. 27.
[백준 / Python] 1003번 피보나치 함수 문제https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.www.acmicpc.net코드import sys input = sys.stdin.readline T = int(input()) data0 = [0] * 45 data1 = [0] * 45 data0[0] = 1 data1[0] = 0 data0[1] = 0 data1[1] = 1 for i in range(2, 42): data0[i] = data0[i - 1] + data0[i - 2] data1[i] = data1[i - 1] + data1[i - 2] for _ in range(T): n = int(input()).. 2023. 5. 5.
[백준 / Python] 1780번 종이의 개수 문제 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수로 되어 있다면 이 종이를 그대로 사용한다. (1)이 아닌 경우에는 종이를 같은 크기의 종이 9개로 자르고, 각각의 잘린 종이에 대해서 (1)의 과정을 반복한다. 이와 같이 종이를 잘랐을 때, -1로만 채워진 종이의 개수, 0으로만 채워진 종이의 개수, 1로만 채워진 종이의 개수를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 37, N은 3k 꼴)이 주어진다. 다음 N개의 줄에는 N개의 정수로 행렬이 주어진다 출력 첫째 줄에 -1로만 채워진 종이의 개수를, 둘째 줄에 0으로만 채.. 2023. 1. 15.
[백준 / Python] 16953번 A → B 백준 16953 [ A → B ] 문제 python 풀이 문제 정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다. 2를 곱한다. 1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자. 입력 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. 출력 A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다. 예제 입력 출력 2 162 5 4 42 -1 1000 40021 5 from collections import deque A, B = map(int, input().split()) # A를 B로만들기 # 1. 2를곱하거나 # 2. 숫자 뒷 자리에 1을 추가 (숫자 * 10 + 1) qu.. 2023. 1. 11.
[알고리즘] 알파벳 피라미드 만들기 (c언어 / 예제) 문제 설명 정수 1개를 입력 받습니다. 입력 받은 정수가 0 이라면 프로그램을 종료합니다. 입력 받은 정수가 1 ~ 26이라면 정수에 따른 알파벳 피라미드를 만들어줍니다. 입력 받은 정수가 그 이외의 수라면 다시 입력을 받도록합니다. 다음 예제의 규칙을 따르는 알고리즘을 만들어야합니다. 1를 입력했을 때 5를 입력했을 때 25를 입력했을 때 예제 코드 #include int main(void) { int i = 1; int in; int j = 1; while (1) { printf("1부터 26까지의 정수를 입력하시오(exit = 0): "); scanf_s("%d", &in); if (in == 0) { printf("Goodbye\n"); break; } if (!(0 2022. 2. 19.
728x90
반응형