728x90
[백준알고리즘] 2581번: 소수 -C++
예전에 풀었던 문제다. 파이썬으로 푼 줄 알았는데, 자바로만 예에에에엣날에 풀고 안 풀었던 문제였다.
파이썬으로 안 푼 이유는 이전 1978번 소수 문제와 유사해서 안 푼 것 같다.
1978번 문제에 대한 풀이는 아래의 주소에서 했었다.
[백준알고리즘] 1978번: 소수 찾기 -Python, C++ (tistory.com)
여기서도 마찬가지로 풀기는 한다.
먼저, 에라토스테네스의 체를 채운다. 소수인 인덱스에만 \(true\)로 놔두고 합성수와 1은 \(false\)로 바꿔준다.
이후 들어오는 범위에 대해서 반복문으로 돌아가면서 각 값마다 에라토스테네스의 체를 통해 소수 여부를 확인한다.
로직 자체는 쉽다. 마지막에 출력 부분에만 ostringstream
을 사용해줬다.
sstream
헤더에 있는 ostringstream
은 아래의 코드와 같이 출력문을 정의해줄 때 사용해 줄 수 있다. ostringstream
객체 자체가 스트림 객체이기 때문에 스트림 버퍼로써의 역할을 수행한다. 이후 str()
메서드를 호출해주면서 문자열로 출력한다.
삼항다항식에서 :
를 기준으로 좌우의 타입이 같아야 하는 것 같아 앞의 \(minimum\) 값도 to_string
을 통해서 문자열로 만들어주었다.
#include <iostream>
#include <sstream>
bool field[10001];
void eratosthenes(void);
void solve(void);
int main(void)
{
eratosthenes();
solve();
return 0;
}
void eratosthenes(void)
{
std::fill_n(field, 10001, true);
field[0] = field[1] = false;
for (int i = 2; i < 5001; i++)
{
if (!field[i]) continue;
int temp = 2;
while (i * temp <= 10000)
{
field[i * temp] = false;
temp++;
}
}
}
void solve(void)
{
int m, n;
std::cin >> m >> n;
int total = 0;
int minimum = -1;
for (int i = m; i <= n; i++)
{
if (!field[i]) continue;
if (minimum < 0) minimum = i;
total += i;
}
std::ostringstream oss;
oss << total << std::endl << minimum;
std::cout << (minimum < 0 ? std::to_string(minimum) : oss.str());
}
잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다
728x90
'algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 4948번: 베르트랑 공준 -C++ (0) | 2021.01.18 |
---|---|
[백준알고리즘] 1929번: 소수 구하기 -C++ (0) | 2021.01.17 |
[백준알고리즘] 2775번: 부녀회장이 될테야 -C++ (0) | 2021.01.17 |
[백준알고리즘] 1193번: 분수찾기 -C++ (0) | 2021.01.17 |
[백준알고리즘] 2292번: 벌집 -C++ (0) | 2021.01.17 |