#54. 백준 2941번 문제 풀이: 크로아티아 알파벳 문제 원본 보기
예전 운영체제에서는 크라아티아 알파벳을 입력할 수 없어서, 아래와 같이 알파벳을 변경해서 입력했다. 크로아티아 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어 ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k) 이다. dž, lj, nj 는 분리될 수 없는 알파벳 하나로 본다. 단어가 주어졌을 때, 몇개의 크로아티아 알파벳인지 출력하시오. 입력: 100글자 이내의 단어 출력: 크로아티아 알파벳 수
입력/출력
--입력--
ljes=njak
--출력--
6
--입력--
ddz=z=
--출력--
3
--입력--
nljj
--출력--
3
--입력--
c=c=
--출력--
2
--입력--
dz=ak
--출력--
3
문제풀이+해설
주어진 단어문자열에서 한 글자씩 위치를 이동하면서 크로아티아 변경문자가 있는지 확인하면 된다.
--
단어
루프 (문자열 끝에 도달할 때 까지):
 단어문자열 다음글자씩 이동
 변경문자가 있으면 변경글자수 만큼 위치 추가 이동, 카운트 +1 증가
 변경문자가 없으면 위치 한글자 이동, 카운트 +1 증가
루프 끝
카운트 출력
--
code sol.
#include <iostream>
using namespace std;

int main() {
  int i, j, l, count = 0, ck = 0, an = 0;
  // 크로아티아 알파벳 변경 문자들 목록
  string ap[] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
  string wd; // 단어를 입력 받을 문자열
  cin >> wd; // 단어를 입력 받는다.
  l = wd.length(); // 단어길이
  i = 0; // 단어 위치 인덱스
  count = 0; // 알파벳 개수
  while(i < l) {
    ck = 0; // 변경 알파벳 체크 여부, 초기값 0
    for(j = 0; j < 8; j++) { 
      an = ap[j].length(); // 변경 알파벳 글자수
      string wd2 = wd.substr(i, an); // 현재 비교 위치값에서 변경문자 길이 만큼만 추출
      if(wd2.compare(ap[j]) == 0) { // 변경 문자와 같으면 알파벳 개수 증가
        ++count; // 변경 문자수가 많더라도 하나만 증가
        i += an; // 변경된 알파벳 수 만큼 인덱스값 증가
        ck = 1; // 변경 알파벳 체크 여부, 1
        break; // 변경된 알파벳을 찾았으므로 추가 비교 중단.
      }
    }
    
    if(ck == 0) { // 일반 알파벳이면 count(카운트) 와 i(인덱스) 하나씩 증가
      ++count;
      ++i;
    }

  }
  cout << count; // 알파벳 글자수 출력
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.