안녕하세요.
여행벌입니다.
오늘은 백준 16360번 Go Latin 문제풀이를 해보려고 합니다.
ACM-ICPC 2018 본선 문제로 ACM-ICPC 문제 치고는 되게 쉬웠던 것 같습니다.
https://www.acmicpc.net/problem/16360
문제는 'n개의 단어가 주어졌을 때, pseudo-latin 단어로 바꿔서 출력해주는 알고리즘을 구현하라.' 입니다.
단어의 끝 문자가 위의 테이블에 해당되면, pseudo-latin 문자로 바꿔서 출력해주면 되는데요.
다른 더 좋은 알고리즘이 있을 수도 있지만, 저는 간단한 문제라 더 생각 안 하고 if 문을 통해
간단하게 알고리즘 구현할 수 있었습니다.
[알고리즘설계]
1. switch 문을 통해 입력받은 string의 끝 문자 들을 다 체크한다. 이때, Pseudo-Latin으로 바꿔줘야 하는 문자가 있다면, 바꿔주면서 출력한다. 다만 -n, -ne를 제외하고 모두 원래의 단어에 글자를 추가해주면 되므로 원래의 string을 출력하고 뒤에 추가로 char을 출력해준다.
#include<stdio.h>
#include<string.h>
int main(void) {
int total_number;
scanf("%d", &total_number);
while (total_number > 0) {
char list1[31];
scanf("%s", list1);
switch (list1[strlen(list1) - 1]) {
case 'a':
printf("%ss\n", list1); break;
case 'i':
printf("%sos\n", list1); break;
case 'y':
list1[strlen(list1) - 1] = '\0';
printf("%sios\n", list1); break;
case 'l':
printf("%ses\n", list1); break;
case 'n':
list1[strlen(list1) - 1] = '\0';
printf("%sanes\n", list1); break;
case 'e':
if (list1[strlen(list1) - 2] == 'n') {
list1[strlen(list1) - 1] = '\0';
list1[strlen(list1) - 1] = '\0';
//조심! 위에서 마지막 글자를 이미 날려서, strlen이 하나 줄었음!
printf("%sanes\n", list1);
}
else
printf("%sus\n", list1);
break;
case 'o':
printf("%ss\n", list1); break;
case 'r':
printf("%ses\n", list1); break;
case 't':
printf("%sas\n", list1); break;
case 'u':
printf("%ss\n", list1); break;
case 'v':
printf("%ses\n", list1); break;
case 'w':
printf("%sas\n", list1); break;
default:
printf("%sus\n", list1); break;
}
total_number--;
}
}
너무 간단한 문제라 여기서 해설 마치겠습니다.
'Problem Solving > ICPC' 카테고리의 다른 글
[ACM-ICPC][BOJ] 13567 - ROBOT 문제풀이 (0) | 2019.07.21 |
---|---|
[ACM-ICPC][BOJ] 13565 - Percolation 문제풀이 (0) | 2019.07.21 |
[ACM-ICPC][BOJ] 16360 - Go Latin 코드반성 (0) | 2019.07.19 |
[ACM-ICPC][BOJ] 14954 - HAPPY NUMBER 코드반성 (0) | 2019.07.19 |
[ACM-ICPC][BOJ] 14954 - HAPPY NUMBER 문제풀이 (0) | 2019.07.18 |