본문으로 바로가기

문자열과 문자열을 다루는 함수를 사용하여 이번 단계의 문제들을 풀어보자.

11654: 아스키 코드

#include <cstdio>

int main() {
  char ch;
  scanf("%c", &ch);
  printf("%d\n", ch);
  return 0;
}

10809: 알파벳 찾기

#include <cstdio>
#include <cstring>

int main() {
  char str[100];
  scanf("%s", str);
  
  int a[26];// 알파벳의 위치를 저장하는 배열
  memset(a, -1, sizeof(a));// 배열의 초기값을 -1로 초기화
  
  auto l = strlen(str);
  for (auto i=0; i<l; i++) {
    int j = str[i] - 'a';
    a[j] = a[j] == -1 ? i : a[j];
  }
  
  for (int i=0; i<26; i++) {
    printf("%d ", a[i]);
  }
  
  printf("\n");
  return 0;
}

2675: 문자열 반복

#include <cstdio>
#include <cstring>

int main() {
  int t;
  scanf("%d", &t);
  
  while (t--) {
    int r;
    scanf("%d", &r);
    getchar();
    
    char str[20];
    scanf("%s", str);
    
    auto l = strlen(str);
    for (auto i=0; i<l; i++) {
      for (int j=0; j<r; j++) {
        printf("%c", str[i]);
      }
    }
    
    printf("\n");
  }
  
  return 0;
}

1157: 단어 공부

#include <cstdio>
#include <cstring>

int main() {
  char str[1000000];
  scanf("%s", str);
  
  int a[26];// 알파벳의 개수를 저장하는 배열
  memset(a, 0, sizeof(a));// 배열의 초기값을 0으로 초기화
  
  int m = 0;// 제일 많이 나온 알파벳의 개수
  
  auto l = strlen(str);
  for (auto i=0; i<l; i++) {
    int j = 0;
    
    // 대문자든 소문자든 같은 알파벳으로 생각하고 개수를 헤아린다
    if (str[i] >= 'a' && str[i] <= 'z') {
      j = str[i] - 'a';
    }
    if (str[i] >= 'A' && str[i] <= 'Z') {
      j = str[i] - 'A';
    }
    
    a[j]++;
    m = m > a[j] ? m : a[j];
  }
  
  char answer = '?';
  int k = 0;// 가장 많이 나온 알파벳의 개수
  for (int i=0; i<26; i++) {
    if (a[i] == m) {
      answer = i + 'A';
      k++;
    }
  }
  
  printf("%c\n", k == 1 ? answer : '?');// k가 2 이상인 경우 가장 많이 나온 알파벳이 2개 이상이라는 뜻
  return 0;
}

1316: 그룹 단어 체커

#include <cstdio>
#include <cstring>

int main() {
  int n;
  scanf("%d", &n);
  
  int k = n;// 그룹 단어의 개수
  
  while (n--) {
    getchar();
    
    bool a[26];// 알파벳이 연속되는 경우를 제외하고 이전에 나왔는지를 확인하는 배열
    memset(a, 0, sizeof(a));
    
    char str[100];
    scanf("%s", str);
    
    auto l = strlen(str);
    for (auto i=0; i<l; i++) {
      if (str[i] == str[i+1]) continue;
      int j = str[i] - 'a';
      if (a[j]) {
        k--;// 알파벳이 이전에 나왔다면 그룹 단어에서 배제
        break;
      }
      a[j] = true;
    }
  }
  
  printf("%d\n", k);
  return 0;
}

1152: 단어의 개수

#include <cstdio>
#include <cstring>

int main() {
  char str[1000000];
  scanf("%1000000[^\n]s", str);
  
  int k = 0;
  auto l = strlen(str);
  for (auto i=0; i<l; i++) {
    if (str[i] == ' ') k++;
  }
  
  if (str[0] == ' ') k--;
  if (str[l-1] == ' ') k--;
  
  printf("%d\n", k+1);// 단어의 개수는 띄어쓰기+1 이다
  return 0;
}

2908: 상수

#include <cstdio>
#include <cstring>

void reverse(char *);// 문자열을 뒤집는 함수
bool comp(char *, char *);// 문자열의 대소를 비교하는 함수

int main() {
  char str1[4], str2[4];
  scanf(" %s", str1);
  scanf(" %s", str2);
  
  reverse(str1);
  reverse(str2);
  
  printf("%s\n", comp(str1, str2) ? str1 : str2);
  return 0;
}

void reverse(char *str) {
  auto l = strlen(str);
  for (auto i=0; i<l/2; i++) {
    char tmp = str[i];
    str[i] = str[l-i-1];
    str[l-i-1] = tmp;
  }
}

bool comp(char *str1, char *str2) {
  if (str1[0] > str2[0]) return true;
  if (str1[0] == str2[0]) {
    if (str1[1] > str2[1]) return true;
    if (str1[1] == str2[1]) {
      if (str1[2] > str2[2]) return true;
      return false;
    }
    return false;
  }
  return false;
}

5622: 다이얼

#include <cstdio>
#include <cstring>

const int TIME[26] = {
  3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10
};// 알파벳을 누르는데 걸리는 시간

int main() {
  char s[16];
  scanf("%s", s);
  
  int ans = 0;
  
  auto l = strlen(s);
  for (auto i=0; i<l; i++) {
    ans += TIME[s[i] - 'A'];
  }
  
  printf("%d\n", ans);
  return 0;
}

2941: 크로아티아 알파벳

#include <cstdio>
#include <cstring>

char str[101];

int main() {
  scanf("%100[^\n]s", str);
  int l = (int)strlen(str);
  
  int cnt = 0;
  for(int i=0 ; i<l ; i++){
    if(str[i] == 'c' && str[i+1] == '='){
      cnt++; i++;
    }
    else if(str[i] == 'c' && str[i+1] == '-'){
      cnt++; i++;
    }
    else if(str[i] == 'd' && str[i+1] == 'z' && str[i+2] == '='){
      cnt++; i+=2;
    }
    else if(str[i] == 'd' && str[i+1] == '-'){
      cnt++; i++;
    }
    else if(str[i] == 'l' && str[i+1] == 'j'){
      cnt++; i++;
    }
    else if(str[i] == 'n' && str[i+1] == 'j'){
      cnt++; i++;
    }
    else if(str[i] == 's' && str[i+1] == '='){
      cnt++; i++;
    }
    else if(str[i] == 'z' && str[i+1] == '='){
      cnt++; i++;
    }
    else {
      cnt++;
    }
  }
  printf("%d\n", cnt++);
  return 0;
}

댓글을 달아 주세요