티스토리 뷰
1. 나머지 연산
답이 너무 커서(정답이 int나 longlong과 같은 자료형의 범위를 넘어갈 때) 나머지 값을 요구하는 문제에서는, 답을 다 구한 다음에 나머지를 구하는 것이 아니라, 연산할 때마다 나머지를 구해야 한다.
(A+B)%C = (A%C + B%C)
(A*B)%C = (A%C * B%C)
▶뺄셈의 경우 주의해야 할 것!
(6-5)%3 = 1 % 3 = 1
(6%3 - 5%3)%3 = (0 - 2) % 3 = -2 % 3 = -2? 1?
이것은 언어마다 답이 다르다.
C11, C++14 : -2
Java : -2
Python3 : 1
마이너스가 나오는 언어의 경우, A%C - B%C 에 C를 더해준 뒤 C로 나누도록 한다.
즉, (A%C - B%C +C ) %C
■ BOJ 10430번 - 나머지 acmicpc.net/problem/10430
10430번: 나머지
첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)
www.acmicpc.net
2. 최대공약수(GCD)
재귀를 이용한 gcd 구현
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a%b)
반복문을 이용한 gcd 구현
def gcd(a,b):
while b != 0:
r = a%b
a = b
b = r
return a
-> O(logN)
3. 최소공배수(LCM)
A * B = GCD * LCM 임을 기억하자!
위 식을 이용하여 LCM = A*B / GCD 로 최소공배수를 구한다.
+) python으로 아래 문제 풀 때, lcd = A*B // gcd 로 풀어야 맞게 나온다.
■ BOJ 2609번 - 최대공약수와 최소공배수
2609번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
4. 소수
<소수 관련 알고리즘>
1. N의 소수 여부 판별
2. N보다 작거나 같은 모든 자연수 중에서 소수를 찾아내는 방법
1. N의 소수 여부 판별
1-1) 소수에 대한 기본적인 개념을 이용하여 구하는 방법
N이 소수가 되려면,
- 2보다 크거나 같고
- N-1보다 작거나 같은 자연수로 나누어 떨어지면 안된다.
def prime(n):
if n<2:
return False
for i in range(2, n):
if n%i == 0:
return False
return True
-> O(N)
1-2) N = a * b (a<=b)일 때, a=2이면 b=N/2 라는 점을 이용하여,
N이 소수가 되려면 2보다 크거나 같고 N/2 보다 작거나 같은 자연수로 나누어 떨어지면 안된다.
def prime(n):
if n<2:
return False
for i in range(2, n/2+1):
if n%i == 0:
return False
return True
-> O(N/2) = O(N)
1-1방법과 그닥 차이가 없다.
1-3) N이 소수가 되려면 2보다 크거나 같고, 루트N보다 작거나 같은 자연수로 나누어 떨어지면 안된다.
N = a * b (a<=b) 에서 a<=루트N 이면 b>=루트N 일 수밖에 없다.
왜냐하면, a>루트N, b>루트N일 경우, a*b>N이므로 성립X, a<루트N, b<루트N일 경우, a*b<N이므로 성립X
따라서 a<=루트N, b>=루트N이다.
def prime(n):
if n<2:
return False
i = 2
while i*i <= n: # 루트를 사용하지 않기 위해 i*i, 제곱형식으로 나타냄
if n % i == 0:
return False
i += 1
return True
-> O(루트N)으로 가장 빠른 방법이다.
■ BOJ 1978번 - 소수찾기 www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
2. N보다 작거나 같은 모든 자연수 중에서 소수를 찾아내는 방법
★에라토스테네스의 체★
- 2부터 N까지 모든 수를 써놓는다.
- 아직 지워지지 않은 수 중에서 가장 작은 수를 찾는다.
- 그 수는 소수이다.
- 이제 그 수의 배수를 모두 지운다.
ex. 2부터 100의 수가 있다 치자.
(2,3,4,5,6,7,8,9,10,11, ..., 100)
- 아직 지워지지 않은 수 중에서 가장 작은 수인 2의 배수들을 모두 지운다.
(남은 수 : 3,5,7,9,11,13, ..., 99)
- 그 다음 지워지지 않은 수 중에서 가장 작은 수인 3의 배수들을 모두 지운다.
(남은 수 : 5,7,11,13,17, ..., 97)
- 그 다음 지워지지 않은 수 중에서 가장 작은 수인 5의 배수들을 모두 지운다.
이때, 남은 수를 잘 보면, 5*1 ~ 5*4 까지는 이미 지워진 것을 알 수 있다. 따라서 5*5부터 살펴보며 지우면 된다.
■ BOJ 1929번 - 소수구하기 www.acmicpc.net/problem/1929
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
■ BOJ 6588번 - 골드바흐의 추측 www.acmicpc.net/problem/6588
6588번: 골드바흐의 추측
각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰
www.acmicpc.net
'알고리즘, 코딩테스트' 카테고리의 다른 글
Greedy 기출문제 - 모험가 길드, 곱하기 혹은 더하기, 뒤집기(BOJ 1439), 만들 수 없는 금액, 볼링공 고르기(SW마에스트로 기출), 무지의 먹방 라이브(프로그래머스-카카오 기출) (0) | 2022.04.24 |
---|---|
BOJ 백준 코드플러스 알고리즘 기초 - 다이나믹 프로그래밍1 (0) | 2021.02.15 |
- Total
- Today
- Yesterday
- partyrock
- 티스토리챌린지
- 알고리즘
- AWSBedrock
- 정적 웹페이지 배포
- S3 403 forbidden
- 오블완
- ChatGPT
- 술자리병돌리기게임
- 코딩테스트
- S3배포
- easycode chatGPT
- 정적 웹사이트 배포
- awsgenai
- 병돌리기구현
- SpacewBetween
- genaiapp
- easycode
- aws생성형ai
- partyrock생성
- 파이썬
- partyrock사용볍
- PYTHON
- partyrock앱
- partyrock무료
- React native 작동 원리
- 백준
- vscode easycode
- 생성형AI
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |