[BOJ] 2941 "크로아티아 알파벳" 문제 풀이 & 소스 코드 with C/C++

    반응형

    #INFO

    난이도 : SIVLER5

    문제출처 : 2941번: 크로아티아 알파벳 (acmicpc.net)

     

    2941번: 크로아티아 알파벳

    예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

    www.acmicpc.net


    #SOVLE

    처음에는 단순 if의 나열로 문제를 풀이했다. 구현은 매우 간단했지만, 소스코드가 너무 난잡해졌다.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
      string str ="";
      cin >> str;
      int cnt = 0;
      for (int i = 0 ; i < str.length() ; i++) {
        if (str[i] == 'c') {
          if (str[i+1] == '=' || str[i+1] == '-') {
            cnt++;
            i++;
            continue;
          }
        }
    
        else if (str[i] == 'l') {
          if (str[i+1] == 'j') {
            cnt++;
            i++;
            continue;
          }
        }
    
        else if (str[i] == 'n') {
          if (str[i+1] == 'j') {
            cnt++;
            i++;
            continue;
          }
        }
    
        else if (str[i] == 's') {
          if (str[i+1] == '=') {
            cnt++;
            i++;
            continue;
          }
        }
    
        else if (str[i] == 'z') {
          if (str[i+1] == '=') {
            cnt++;
            i++;
            continue;
          }
        }
    
        else if (str[i] == 'd') {
          if (str[i+1] == 'z') {
            if (str[i+2] == '=') {
              cnt++;
              i+=2;
              continue;
            }
          }
          else if (str[i+1] == '-') {
            cnt++;
            i++;
            continue;
          }
        }
    
        cnt++;    
      }
      cout << cnt << '\n';
      return 0;
    }

     

    구글링을 해보다 좋은 코드가 없을까 찾아보던 와중,, cryptosalamander님의 코드를 발견했다.

    아래 코드와 같이 string 벡터에 크로아티아 알파벳들을 초기화한 뒤, for 반복문을 돌려서 입력받은 str(문자열)에 크로아티아 알파벳이 존재한다면, 해당하는 크로아티아 알파벳을 "#" 즉 1로 변경해 주면 깔끔하게 문자열의 길이를 출력할 수 있다.

    *string 라이브러리의 find , replace 멤버함수 사용법은 다음 포스팅을 참고해 주세요 :)

    find 멤버함수

    replace 멤버함수

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    int main() {
      vector<string> croatian = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
      int idx;
      string str ="";
      cin >> str;
      for (int i = 0 ; i < croatian.size() ; i++) {
        while(1) {
          idx = str.find(croatian[i]);
          if (idx == string::npos)
            break;
          str.replace(idx, croatian[i].length(), "#");
        }
      }
      cout << str.length();
      return 0;
    }

    코드 출처 : https://cryptosalamander.tistory.com/15


    반응형

    댓글

    Designed by JB FACTORY