본문 바로가기

브루트포스3

[BOJ] 1339번 - 단어 수학 알파벳으로 이루어진 문자열을 각각 자릿수마다 숫자로 바꾸어 합의 최대값을 구하는 문제이다. 문제의 예시를 살펴보면 GCF와 ACDEB의 합의 최대값을 구하는 경우를 보면 A*10000 + C*1000 + (D+G)*100 + (E+C)*100 + (B+F)로 표현할 수 있다. 이때 빈도수가 가장 많은 순서대로 알파벳에 값을 넣어주면 되므로 A : 9 / C : 8 / D : 7 / G : 6 / E : 5 / B : 4 / F : 3으로 대입하고 최대값을 계산하면 99437이 나온다. 단계 1 : char로 이루어진 문자열 형태를 알파벳 별 개수로 변환하여 배열에 넣는다. 단계 2 : 알파벳 별 개수를 sort해준다 - 빈도수가 많은 것부터 큰 수를 넣어주기 위해 단계 3 : 9부터 대입하여 알맞은 숫자.. 2022. 6. 15.
[BOJ] 1543번 - 문서 검색 두 문자열을 비교하여 한 문자열에 대하여 다른 문자열이 몇번 등장하는지 구하는 문제이다.(문자열 비교) 문제 조건에서 문자열은 공백도 포함을 하기 때문에 입력에 getline을 사용했다. 이해를 돕기 위해 문자열 A안에 문자열 B가 중복하지 않고 최대 몇번 등장하지 않는다고 가정한다. 이중 for문을 통해 바깥 for문으로 문자열 A길이만큼 돌리고 안쪽 for문으로 문자열 B길이로 비교한 다음 문자열이 다르면 다음 index값으로, 같다면 바깥 for문에서 문자열 B 길이만큼 index를 넘어가서 다시 비교한다. #include #include #include using namespace std; int main() { cin.tie(0); ios_base::sync_with_stdio(false); s.. 2022. 6. 15.
[BOJ] 2501번 - 약수 구하기 단순 약수문제. 문제 조건상 N이 10000 이하 이므로 브루트포스로 탐색하면 clear. 약수의 개수가 K보다 작은 경우 0을 출력하는 조건을 빼먹지 않도록 한다. #include #include #include using namespace std; int main() { cin.tie(0); ios_base::sync_with_stdio(false); int N, K; int count = 0; cin >> N >> K; for (int i = 1; i 2022. 6. 14.