[백준 BOJ] 25840번 Sharing Birthdays (C++/cpp)

2024. 3. 9. 16:10PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/25840

 

25840번: Sharing Birthdays

The first input line contains an integer, n (1 ≤ n ≤ 50), indicating the number of birthdays. Each of the next n input lines contains a birthday in the form of mm/dd. Assume mm will be between 01 and 12 (inclusive) and dd will be between 01 and 31 (inc

www.acmicpc.net

백준 BOJ 25840번 Sharing Birthdays 문제 사진1
백준 BOJ 25840번 Sharing Birthdays 문제 사진2

 

접근 방법 - 벡터를 활용한 중복 여부 확인 문제

백준의 25840번 문제는 벡터를 활용하여 요소 중복 여부를 확인하며 해결할 수 있는 문제이다.

해당 문제는, 입력으로 주어지는 생일 값들에 대하여 서로 다른 생일의 가짓수를 구하여 출력해야 하는 문제이다.

여러 방법들이 있겠지만, 필자는 벡터의 find() 함수를 주로 사용하여 이 문제를 해결하였다.

find() 함수를 통해 벡터 요소 삽입을 제어하고, 최종적으로 벡터의 크기를 출력하는 식으로 코드를 적어나갔다.

간단하지만 아래에 설명을 추가로 적으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해 보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 입력으로 주어지는 생일의 개수(n)를 입력받는다.

 

2) 서로 다른 생일값을 저장할 벡터 v를 미리 선언해 둔다.

 

3) n의 크기만큼, 반복문을 실행하여 아래의 연산을 수행한다.

- 생일(st)을 하나씩 입력받는다.

- find() 함수를 통하여, 현재의 st 값이 v 요소들 중에 존재하는지 탐색한다.

만약 존재하지 않는다면, v의 요소로 추가하도록 한다.

 

4) 위 연산을 모두 끝내었다면, 현재 v의 크기를 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <vector>
#include <algorithm>
#define endl '\n'
using namespace std;

//백준 25840번 코드
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);   cout.tie(NULL);
   
    int n;
    cin >> n;
    cin.ignore();

    vector<string> v;
    for (int i = 0; i < n; i++) {
        string st;
        cin >> st;
        
        if (find(v.begin(), v.end(), st) == v.end()) {
            v.push_back(st);
        }
    }
    cout << v.size() << endl;
}

 

제출 결과

백준 BOJ 25840번 Sharing Birthdays 문제 C++ 제출 결과

(2023.11.21 백준 25840번 문제 제출 결과)

반응형