일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 4101
- BoB 7기
- 정보보호 영재원
- 11943
- 2501
- 11109
- 5086
- boj
- 10995
- 영재원
- 2506
- Python
- text
- 2965
- Best of the Best
- BoB 후기
- 1547
- 차세대 보안 리더 양성
- 공주대 정보보호
- 정보보호 영재교육원
- 영재교육원
- BOB
- acmicpc
- 2476
- 10833
- EOF
- 2605
- 리뷰
- 차세대 보안 리더 양성 프로그램
- 5586
- Today
- Total
목록acmicpc (311)
짱해커가 되어보자
문제 이항계수를 묻는 문제이다 입력 : n, k 출력 : N 풀이 입력받은 n, k에 대해 [n+1][k+1]의 리스트를 생성해 n, k의 값을 도출하도록 작성하였다 ''' 1 0 0 0 0 1 1 0 0 0 1 2 1 0 0 1 3 3 1 0 1 4 6 4 1 ''' n, k = map(int, input().split()) l = [[1] + [0]*k for _ in range(n+1)] for i in range(1, n+1): for j in range(1, k+1): l[i][j] = l[i-1][j-1] + l[i-1][j] print(l[n][k])
문제 블랙잭의 기본적인 규칙에 따라가며, 몇 가지 조건을 추가한다 입력 받을 카드 수 N과 목표치 M을 주며, 이후 N만큼 숫자를 제공한다 이 때 승리에 가장 가까운 최댓값을 출력하면 된다 입력 : n(3 ~ 100), m(10 ~ 300,000), N(n의 개수만큼, 1 ~ 100,000) 출력 : N 풀이 라이브러리를 활용해 가능한 조합을 구하고, 이에 대한 합 계산 이후 내림차순 정렬으로 M과 비교하여 가능한 가장 큰 수를 출력하였다 from itertools import permutations n, m = map(int, input().split()) for i in sorted(list(map(sum, list(permutations(list(map(int, input().split())), 3..
문제 0층 ~ 14층, 1호 ~ 14호까지 있는 아파트에서는 [k][n] 호에 들어가는 인원은 [k-1][1:n]까지 인원 수의 합과 같다 0층의 i호에는 i의 인원이 들어가 있다 T의 테스트 케이스 동안 k, n을 입력받고 인원을 출력으로 주면 된다 입력 : t, k, n 출력 : N 풀이 단순하게 i 조건과 각 호의 인원을 계산하여 출력하게 하였다 l = [[0]*15 for i in range(15)] for i in range(0, 15): l[0][i] = i for k in range(1, 15): for n in range(1, 15): l[k][n] = l[k-1][n] + l[k][n-1] for _ in range(int(input())): k, n = int(input()), int(..
문제 벌집 형태로 이루어진 방이 존재하며, 1부터 시작해서 N번방 까지 이동하는데 몇개의 방을 지나는지 물어보는 문제이다 입력 : N(1 ~ 1,000,000,000) 출력 : N 풀이 벌집의 방은 1을 시작으로 6(n-1)씩 증가하며 층을 이룬다 (1, 7, 19, 37, 61) N이 어느 층에 속하는지에 따라 이전 층의 갯수만 구한다면 지나는 방이 정해진다 f, c = [0, 1], 2 n = int(input()) while(n > f[-1]): f.append(f[c-1] + 6*(c-1)) c += 1 print(c-1)
문제 N에 대한 분해합의 가장 작은 생성자 M을 구하는 것 *분해합 : M + M의 각자릿 수의 합 = N 입력 : N(1 ~ 1,000,000) 출력 : N 풀이 분해합 생성자를 구하기 위한 반복의 시작은 N에서 N자리의 길이 * 각 자릿수의 최대값인 9를 곱한 만큼 빼주어 시작하면 된다 import sys n = int(input()) l = len(str(n)) for i in range(n-l*9 if n-l*9 > 0 else 0, n): if(n == i + sum(int(i) for i in str(i))): print(i) sys.exit() print(0)
문제 (0, 0)과 (w, h)로 이루어진 직사각형 안의 (x, y)에서 가장 가까운 변의 거리를 구하는 문제이다 입력 : x, y, w, h 출력 : n(가장 가까운 길이) 풀이 x, y, w, h = map(int, input().split()) print(min(x, y, w-x, h-y))
문제 높이(H) x 방(W)의 호텔에 N번째 손님이 올 때 어느 방에 배치할 것인지에 대한 문제이다 손님은 엘레베이터에서 가까운 방을 선호하기에 101, 201호와 같이 층에 상관없이 가까운 방을 선호한다 이 때 N번째 손님에게 어느 방을 줘야할지 묻는 문제이다 H,W : N(1 ~ 99) N : 1 ~ H*W 입력 : T번의 테스트 케이스 동안 H W N 출력 : YXX or YYXX(해당하는 호수를 출력 층 + 방번호) 풀이 for _ in range(int(input())): h, w, n = map(int, input().split()) if(n%h == 0): print('{0}{1:02d}'.format(h, n//h)) else: print('{0}{1:02d}'.format(n%h, n//..
문제 숫자 두개를 입력받아 값을 비교하여 큰 수를 출력하는 것이 목적이다 그러나 상수라는 친구가 숫자를 거꾸로 읽기 때문에 이를 고려하여 출력을 해야한다 입력 : a, b 출력 : a>b ? a : b 풀이 파이썬 map을 활용해 입력받은 값들을 반대로 변경한 다음 비교값을 출력한다 def rv_int(x): return int(x[::-1]) a, b = map(rv_int, input().split()) print(a if a > b else b)
문제 문제 제목은 분산처리로 컴퓨터 10개가 주어진만큼 작업을 수행한다면, 마지막 작업은 몇번째 컴퓨터가 수행하는가? 라는 질문에 대한 답을 T 횟수 만큼 반복해주면 된다. 컴퓨터의 번호는 1번 ~ 10번 까지 있다. 입력받은 횟수(T) 마다 a와 b를 입력받아 a^b 만큼 연산을 수행 한 후 최종 번호를 출력하면 된다 a : N(1 ~ 100) b : N(1 ~ 1,000,000) 입력 : T, a, b 출력 : N(1~10) 풀이 문제에 주어진 1초라는 제한을 보았을 때 단순 연산으로는 제한이 걸릴 것 같았다 제곱 연산을 수행한 후 마지막 1의 자리의 숫자만 확인하므로 a의 1~10까지 b를 반복하며 규칙성을 확인해보았다 1 ^ N = 1 2 ^ N = 2, 4, 8, 6 ... 3 ^ N = 3, ..
문제 우선 이진수 중 다음의 특정 조건을 만족하는 경우 이친수라 하여, 해당 개수를 구하는 문제이다 맨 처음 앞자리가 무조건 1로 시작해야한다 연속된 1이 올 수 없다 입력 : N(1~90) 출력 : N에 대한 이친수의 수 풀이 해당 조건을 만족해야할 경우 어떤 숫자이든 시작은 1이며, 다음에 이어오는 숫자는 0이어야 하므로 10이 기본 시작임을 알 수 있다 1의 경우 1. 1개 2의 경우 10. 1개 3의 경우부터 맨 뒷 바이트인 0,1 로 2개 4의 경우 3의 해당하는 경우와 2처럼 맨 앞이 10인 경우 3개. 5의 경우 4처럼 000, 001, 010의 경우와 3처럼 100, 101이 와야함을 알 수 있었다 e[i] = e[i-1] + e[i-2]와 같은 단순 점화식 문제로 풀리는데, 내가 생각하는..