-
백준(C++) 25970번 [현대 모비스 에어 서스펜션]알고리즘(백준) 2024. 12. 28. 21:26
https://www.acmicpc.net/problem/25395
접근방법
현대 S/W 문제집에 있는 현대 모비스 에어 서스펜션 문제이다.
요약하자면 비교할 비교 데이터 개수 B가 정해진다 처음 B개는 높음, 나중 B개는 낮음 데이터이다.
그후 비교할 실시간 데이터가 N개 주어진다. 실시간 데이터에 비교데이터를 비교하여 높음과 낮음을 나타낸다.
이를 N개 출력하면된다. 높낮이가 맞으면 GOOD 또는 LOW,HIGH로 출력하면된다.
이를 처음 봤을떄 비교데이터 개수에 따라 컨테이너에 집어넣고, 컨테이너가 차있는 글자수를 일일이 비교한다는 생각을 했다. 하지만 이는 너무 난잡했다.
그래서 비교 데이터를 컨테이너에 집어넣고 find로 찾는 방법을 사용했다.
find는 처음 쓴거라 몇몇 표준 표현을 보고 했다.
여기서 처음 시도한 명령어는 size_t(해당 시스템에서 포함할수있는 최대 크기의 부호 없는 정수형 타입), find(특정 값 선택)
진행은 일단 비교 데이터 입력후 HIGH데이터와 LOW데이터 컨테이너를 가지고 find 역할을 하는 곳에 집어넣는다
find 역할 함수의 기능은 못찾으면 함수에서 탈출하고, 찾을시 찾은 위치에서 +1한후 다시 find를 진행하여 못찾을때까지 반복한다. 이렇게 나온 후 C = HIGH 결과값 - LOW 결과값 하여 C의 값에 따라 출력을 한다.생각은 떠올랐지만 구현이 어려워서 코드를 여러곳에서 보고 구현했다.
코드는 다음과 같다.
#include<iostream> #include<algorithm> #include<string> #include<vector> using namespace std; int countOccurrences(const string &text, const string &pattern) { int count = 0; size_t startPos = 0; while (true) { size_t foundPos = text.find(pattern, startPos); // string::npos = find false 값 if (foundPos == string::npos) { break; } count++; startPos = foundPos + 1; } return count; } int main(){ ios::sync_with_stdio(false); cin.tie(0); int B; cin >> B; vector<string> lowPatterns(B); for(int i=0; i<B; i++){ cin >> lowPatterns[i]; } vector<string> highPatterns(B); for(int i=0; i<B; i++){ cin >> highPatterns[i]; } int N; cin >> N; while(N--){ string realTimeData; cin >> realTimeData; long long lowCount = 0; for(const auto &lp : lowPatterns){ lowCount += countOccurrences(realTimeData, lp); } long long highCount = 0; for(const auto &hp : highPatterns){ highCount += countOccurrences(realTimeData, hp); } long long C = highCount - lowCount; if(C > 0) { cout << "LOW " << C << "\n"; } else if(C < 0) { cout << "HIGH " << -C << "\n"; } else { cout << "GOOD\n"; } } return 0; }
'알고리즘(백준)' 카테고리의 다른 글
백준(C++) 2212번 [센서] (2) 2025.01.03 백준(C++) 25395번 [커넥티드 카 실험] (1) 2024.12.27 백준(C++) 3190 [뱀] (0) 2024.10.17 백준(C++) 4179 [불!] (4) 2024.10.16 백준(C++) 7567 [토마토] (0) 2024.10.06