Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Python
- 백준
- 클린 코드
- sqld
- N-Queen
- 오픽 초보
- 서버아키텍처
- 클린코드
- sqld요약
- Javascript
- MFC
- git
- beautifulsoup
- 자청
- SW개발자를 위한 성능좋은 SQL
- 주석
- Backtracking
- SQLD 이론
- 역행자
- DP
- 폴링vs이벤트
- 알고리즘
- BFS
- 파이썬
- 오픽
- SQLD이론
- 게임서버개발
- 서버최적화
- c++
- clean code
Archives
- Today
- Total
가취공부하자
[5636] c++ 소수 부분 문자열 본문
1. 문제 링크
https://www.acmicpc.net/problem/5636
5636번: 소수 부분 문자열
숫자로 이루어진 문자열이 주어진다. 이때, 부분 문자열 중에서 가장 큰 소수를 찾는 프로그램을 작성하시오. 이 문제에서는 2보다 크거나 같고, 100,000보다 작거나 같은 소수만 소수이다.
www.acmicpc.net
2. 풀이
1) 조건을 보면 1~100000(1e5) 사이의 소수를 구하는 문제이다.
따라서 100000까지의 소수를 에라토스테네스의 체를 사용하여 구해준다.
2) 100000->1까지 for문을 돌리면서 소수이면서 s_number(입력)에 부분 문자열에 들어있는 수를 구한다.
그 수가 부분 문자열 중 가장 큰 소수이다.
#include <iostream>
#include <string>
#define MAX 1e5
using namespace std;
bool not_prime_check[100002];
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
//에라토스테네스의 체-> 소수 체크하기
not_prime_check[1] = true;
for (int i = 2; i <= MAX; i++)
{
if (not_prime_check[i])
continue;
for (int j = 2; i*j <= MAX; j++)
{
not_prime_check[i*j] = true;
}
}
string s_number;
while (true) {
cin >> s_number;
if (s_number == "0")
break;
for (int i = MAX; i >=2; i--)
{
//소수 중에 s_number에 들어 있으면 그 수가 가장 큰 소수 부분 문자열이다.
if (!not_prime_check[i]) {
string s_temp = to_string(i);
if (s_number.find(s_temp) != string::npos) {
cout << s_temp << "\n";
break;
}
}
}
}
return 0;
}
알게 된 개념
string.find 함수로 문자열의 안에 부분 문자열을 찾을 수 있다.
string.find(str)에서 str을 찾으면 해당 문자가 위치한 주소 값을 반환하며, 찾지 못한다면 string::npos를 반환한다.
첫 번째 생각했던 방법
더보기
1) 문자열의 부분 문자열을 모두 구한다.
2) 가장 큰 수를 기준으로 에라토스테네스의 체를 적용하여 최대의 수를 구한다
=>당연히 시간 초과가 뜰 것 같음
3) 부분 문자열 중 2,3,5 간단하게 소수가 아닌 것들을 제거하고자 함. => 더러운 코드가 될 것 같음
=> 구글링함.
참조
1. 풀이 방법
https://burningjeong.tistory.com/311
2. stirng.find 함수
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 9663 N-Queen c++ (0) | 2021.10.04 |
---|---|
[백준] 7569 토마토 c++ (0) | 2021.06.28 |
[백준]12865 평범한 배낭 c++ (0) | 2021.06.21 |
[백준] 1300 K번째 수 c++ (0) | 2021.04.07 |
[백준] 2146 다리만들기 c++ (0) | 2021.04.01 |