2501 약수 구하기
문제
1부터 N까지 순서대로 보면서 나누어떨어지는 수(약수)를 발견할 때마다 카운트
K번째 약수가 나오면 바로 출력, 끝까지 못 찾으면 0
풀이
- i = 1 → N까지 증가하면서 N % i == 0이면 약수
- 약수 나올 때마다 cnt++
- cnt == K 되는 순간 그 i가 K번째로 작은 약수이다.
- return 0; 을 각 조건 아래에 써서 if 조건을 충족하지 못하면 밑의 cout << 0 을 실행하도록 하기!
3460 이진수
문제
- 양의 정수 n이 주어짐. n을 이진수로 표현
- 값이 1인 비트들의 위치를 모두 출력
- 최하위 비트(lsb)의 위치 = 0
- 낮은 위치부터 출력
풀이
- pos → 현재 비트 위치 (0부터)
- n % 2 → 최하위 비트 확인
- n /= 2 → 오른쪽으로 한 비트 이동
1의 위치 찾기가 되는 이유는?
코드 흐름을 보자
int pos = 0;
while (n > 0)
{
if (n & 1) { cout << pos << " "; } n >>= 1; pos++;
}
이게 의미하는 것
| 코드 | 의미 |
| n & 1 | 지금 보고 있는 비트가 1인가? |
| n >>= 1 | 다음 비트로 이동 |
| pos++ | 비트 위치 증가 |
&를 쓴다고 해서
n을 십진수 → 이진수로 변환해서 계산하는 게 아님
CPU는 애초에 모든 정수를 이진수로 저장하고 있어서 변환이라는 과정 자체가 존재하지 않는다.
10818 최소, 최대
문제
- 정수 최대 1,000,000개
- 한 번만 순회(O(N))
최소값은 처음에 1000000정도, 최댓값은 -1000000정도로 정의하고 시작.
- 최솟값 구할 때
→ S = 아주 큰 값 - 최댓값 구할 때
→ B = 아주 작은 값 - 최솟값은 크게, 최댓값은 작게 시작하는 이유는 비교가 반드시 한 번은 성공하도록 만들기 위해서!
- 가장 안전한 방식은 cin >> I; S = B = I; 이렇게 정의하는 것
2460 지능형 기차 2
- 현재 기차 안 인원 cur = 0
- 최대 인원 mx = 0
- 10번 반복하면서:
- cur -= 내린 사람
- cur += 탄 사람
- mx = max(mx, cur)
- mx 출력
2309 일곱 난쟁이
- 난쟁이 9명
- 키는 모두 다름
- 7명의 키 합 = 100
- 가능한 정답 여러 개면 아무거나 OK
- 출력은 오름차순
즉, 전체 합 − (제외할 2명) = 100
'언어 > C++' 카테고리의 다른 글
| [코딩테스트 준비] 백준 실버 2문제(2504 괄호의 값, 2293 동전 1) (0) | 2026.01.01 |
|---|---|
| [코딩테스트 준비] 백준 브론즈 3문제(10870 피보나치 수 5 / 1987 소수 찾기 / 2581 소수), 실버 1문제 (14888 연산자 끼워넣기) (0) | 2025.12.30 |
| [C++] 알튜비튜 6주차 - 그리디 알고리즘 (0) | 2025.03.27 |
| [C++] 알튜비튜 4주차 - 브루트포스 (1) | 2025.03.12 |
| [C++] 알튜비튜 3주차 - 정수론 (0) | 2025.03.04 |