촉촉한초코칩

[백준] 2941(크로아티아 알파벳) c언어 본문

Algorithm

[백준] 2941(크로아티아 알파벳) c언어

햄친구베이컨 2023. 11. 10. 17:09

문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

크로아티아 알파벳변경
č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

출력

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.


 

처음 짠 코드

#include <stdio.h>
#include <string.h>

int main(void) {
  char cro[8][3] = {
  {"c="},
  {"c-"},
  {"dz="},
  {"d-"},
  {"lj"},
  {"nj"},
  {"s="},
  {"z="}
  };

  char input_str[100] = "";
  scanf("%s", input_str);

  int len = strlen(input_str);
  int cnt = 0;
  char ans[3] = "";
  char tmp;

  for(int i=0; i<len; i++) {
    strncat(ans, &input_str[i], 2);
    printf("ans : %s\n", ans);
    for(int z=0; z<8; z++) {
      if(strcmp(ans, cro[z]) == 0) {
        cnt+=1;
        printf("%s %s\n", ans, cro[z]);
      }
    }
    ans[0] = '\0';
  }

  printf("%d\n", cnt);
}

문제점 : 크로아티아 알파벳은 3문자로 된 문자열도 있으므로 dz=가 포함되지 않게됨.

 

도저히 모르겠어서... 검색 찬스

하나하나 확인하는 게 아니라, 해당 문자가 나올 때마다 cnt 값을 줄이는 방법을 사용한다.

입력값 ljes=njak
str[i] i cnt
l 0 1
j 1 2 > 1
e 2 2
j 3 3
= 4 4 > 3
n 5 4
j 6 5 > 4
a 7 5
k 8 6
입력값  ddz=z=
str[i] i cnt
d 0 1
d 1 2
z 2 3
= 3 4 > 3 > 2
z 4 3
= 5 4 > 3

 

#include <stdio.h>
#include <string.h>

int main(void) {

  char str[100];
  scanf("%s", str);
  int cnt = 0;


  for(int i=0; i<strlen(str); i++) {
    cnt++;
    if(str[i] == '=') {
      if(str[i-1] == 'c' || str[i-1] == 's') 
        cnt--;     
      if (str[i - 1] == 'z') {
        cnt--;
        if (str[i - 2] == 'd') 
          cnt--;
      }
    }
    if(str[i] == '-') 
      if(str[i-1] == 'c' || str[i-1] == 'd') 
        cnt--;
    if(str[i] == 'j') {
      if(str[i-1] == 'l' || str[i-1] == 'n')
        cnt--;
    }
  }

  printf("%d\n", cnt);
}

 

https://develop247.tistory.com/30

https://velog.io/@yeonsubaek/%EB%B0%B1%EC%A4%80-2941%EB%B2%88-%ED%81%AC%EB%A1%9C%EC%95%84%ED%8B%B0%EC%95%84-%EC%95%8C%ED%8C%8C%EB%B2%B3-c%EC%96%B8%EC%96%B4