C++로 해결하는 마라톤 문제: 완주 못 한 참가자 찾기
안녕하세요, 프로그래밍과 알고리즘의 세계에 관심이 많은 여러분! 오늘은 C++를 활용해 마라톤에 참가한 사람들 중에서 한 명의 완주하지 못한 참가자를 찾아보는 방법을 알아보겠습니다. 이 문제는 간단하지만 효율적인 데이터 구조를 활용하는 것이 중요합니다.
문제 설명
이번 문제에서는 n명의 참가자가 마라톤에 출전하였고, n-1명의 참가자가 완주한 결과를 주어진다고 가정합니다. 우리가 해야 할 일은 완주하지 못한 한 명의 이름을 찾아내는 것입니다. 이 경우, 각 참가자의 이름을 쉽게 관리할 수 있는 자료구조가 필요합니다.
코드 및 결과
아래는 이 문제를 해결하기 위한 C++ 코드입니다.
#include <iostream>
#include <map>
using namespace std;
int main() {
int n;
string name;
map<string, int> m; // 참가자 이름을 key로, 카운트를 value로 갖는 맵
cin >> n; // 참가자 수 입력받기
// 참가자 이름 입력받기
for (int i = 0; i < n; i++) {
cin >> name;
m[name]++;
}
// 완주한 참가자 이름 입력받기
for (int i = 0; i < n - 1; i++) {
cin >> name;
m[name]--; // 완주자를 카운트에서 하나 줄이기
}
// 완주하지 못한 참가자 찾기
map<string, int>::iterator it;
for (it = m.begin(); it != m.end(); it++) {
if (it->second != 0) { // 카운트가 0이 아닌 이름 출력
cout << it->first << "
";
}
}
return 0;
}
이 코드는 m이라는 map
을 사용하여 참가자 이름을 키로 하고, 해당 이름의 출현 횟수를 값으로 설정합니다. 마라톤에 참가한 인원의 경우 카운트를 증가시키고, 완주한 인원의 경우 카운트를 감소시킵니다. 마지막으로, 카운트가 0이 아닌 참가자의 이름을 출력하여 해결합니다.
코드 설명
- 데이터 구조:
map
을 사용하여 참가자의 이름을 관리하는데, 이름을 키로 사용하고, 카운트를 값으로 저장합니다. 이 방법은 빠르게 참가자를 찾고 추가할 수 있습니다. - ** 참가자 입력**:
먼저, 참가자의 수를 입력받고,for
루프를 통해 각각의 이름을 입력받아 카운트를 증가시킵니다. - 완주자 입력:
for
루프를 사용하여 완주한 참가자의 이름을 입력받고, 해당 이름의 카운트를 감소시킵니다.
- 완주하지 못한 참가자 출력:
map
의 모든 요소를 탐색하여 값이 0이 아닌 이름을 출력합니다. 이 로그리는 완주하지 못한 참가자를 효율적으로 찾아줍니다.
결론
이번 포스트에서는 C++를 이용해 마라톤 완주자 문제를 효율적으로 해결하는 방법을 살펴보았습니다. 이 과정을 통해 자료구조의 선택이 문제 해결에 얼마나 중요한지를 알 수 있습니다. 또한, 이 문제를 해결하며, 기본적인 map
의 사용 방법에 대해 익힐 수 있었습니다.
여러분도 자신의 문제를 해결하는 프로그램을 만들어 보세요! 프로그래밍의 세계는 무궁무진한 가능성이 있습니다. 질문이 있으시면 댓글로 남겨주시면 함께 고민해보겠습니다. 그럼 다음 포스트에서 만나요!
'개발' 카테고리의 다른 글
C++으로 카드 문자열 문제 해결하기: 데이터 구조의 활용법 (1) | 2024.11.13 |
---|---|
Python으로 환경 변수 취약점을 이용한 파일 내용 읽기 실습 (1) | 2024.11.13 |
Git Flow로 협업의 품질 높이기: 버전 관리의 전략적 접근 (0) | 2024.11.13 |
Java 메소드 인스턴스 메소드와 정적 메소드의 차이 이해하기 (0) | 2024.11.13 |
Spring Cloud Gateway로 비동기 웹 애플리케이션 구축하기 (0) | 2024.11.13 |