관리 메뉴

cococo-coding

2789번. 유학 금지 (c++ 풀이) 본문

[BOJ] 코드 모음/C++_learning 문제집

2789번. 유학 금지 (c++ 풀이)

_dani 2024. 1. 12. 16:35

문제

풀이

1. string으로 문자를 입력받는다.

2. CAMBRIDGE를 넣은 문자열 cam을 생성한다. 그리고 이중for문을 사용하여 입력받은 문자 word와 cam을 비교한다.

만약 word에 CAMBRIDGE 문자가 하나라도 있다면 그 문자는 0으로 대체한다.

3. 다시 for문을 이용하여 word 문자열을 출력한다. 이때 앞에서 겹치는 문자를 0으로 바꾸어놨으므로, 포문을 돌릴 때 0이 아닌 애들만 출력한다. 

 

이게 가장 기본적인 풀이이고, 이를 응용하여 함수로 변경한 코드도 있다.

 

이 코드는 두 번째 코드로 아래에서 확인할 수 있다. 

이때는 CAMBRIDGE에 A,B,C,D,E 까지의 알파벳과 G, I, M, R 알파벳이 들어간다는 점을 착안하여 따로 사용자정의함수를 만들어준다. 

그리고 첫번째 코드와 for문을 사용하여 입력받은 문자를 돌리는 것까지는 동일하다.

다만 if 조건문을 쓸때, 이 조건을 함수 int cambridge(char ch)로 빼주는 것이다.

이 함수는 캠브릿지 알파벳을 조건으로 만든 문장을 리턴한다.

main함수에서는 이 함수를 if의 조건문으로 받아서, 만약 함수의 리턴값과 다르면 문자를 출력하고, 리턴값과 동일하면 출력하지 않게 한다.  

 

포인트

1. CAMBRIDGE를 문자열로 생성하여 단어와 비교해주기

2. if문 조건으로 알파벳 하나하나 비교해주기 (-> 함수로 빼주기 가능)


코드

첫번째 코드

#include <iostream>
using namespace std;

/*
    1. 단어를 입력받는다.
    2. 단어에서 CAMBRIDGE에 포함된 알파벳들을 지운다.
    3. 지운 단어를 출력한다.
*/

int main() {
    //1
    string word;
    cin >> word;

    //2
    string cam = "CAMBRIDGE"; 
    for (int i = 0; i < word.size(); i++) {
        for (int j = 0; j < cam.size(); j++) {
            if (word[i] == cam[j]) word[i] = 0;
        }
    }

    //3
    for (int i = 0; i < word.size(); i++) {
        if (word[i] != 0) cout << word[i];
    }
    return 0;
}

 

 

두번째 코드(함수 ver)

#include <iostream>
using namespace std;

/*
    1. 단어를 입력받는다.
    2. 단어에서 CAMBRIDGE에 포함된 알파벳들을 지운다.
    3. 지운 단어를 출력한다.
*/

//캠브릿지 문자와 동일한지 확인하는 함수
int cambridge(char ch) {
    return ((ch >= 'A' && ch <= 'E') || ch == 'G' || ch == 'I' || ch == 'M' || ch == 'R');
}


int main() {
    //1
    string word;
    cin >> word;

    //2
    for (int i = 0; i < word.size(); i++) {
        if (!cambridge(word[i])) cout << word[i]; //3
    }
    
    return 0;
}