일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 영재교육원
- 2506
- 2476
- Best of the Best
- Python
- 리뷰
- 공주대 정보보호
- BoB 후기
- 5586
- 2965
- 1547
- boj
- 11109
- text
- 10833
- 5086
- 영재원
- BoB 7기
- 차세대 보안 리더 양성 프로그램
- 4101
- EOF
- 정보보호 영재교육원
- 차세대 보안 리더 양성
- 정보보호 영재원
- 10995
- BOB
- 2605
- acmicpc
- 2501
- 11943
- Today
- Total
목록boj (348)
짱해커가 되어보자
문제 벌집 형태로 이루어진 방이 존재하며, 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]와 같은 단순 점화식 문제로 풀리는데, 내가 생각하는..