728x90
반응형
문제 풀기 전 생각 :
/*
먼저 기본 가사를 14단어로 쪼개서 입력 받은 숫자를
14로 나눈 값으로 여러가지 케이스를 나눴습니다
그리고 tururu 와 turu 에 해당하는 케이스들은
ru 가 5개보다 적은 케이스들은 직접 조건문으로 출력하고
만약 5개이거나 더 많으면 n/14 + 2 와 n/14 + 1 로 표현했다
*/
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if( n%14 == 1 || n%14 == 13) cout << "baby";
else if( n%14 == 2 || n%14 == 0) cout << "sukhwan";
else if( n%14 == 5) cout << "very";
else if( n%14 == 6) cout << "cute";
else if( n%14 == 9) cout << "in";
else if( n%14 == 10) cout << "bed";
else if( n%14 == 4 || n%14 == 8 || n%14 == 12){
if(n < 14) cout << "turu";
else if(n < 28) cout << "tururu";
else if(n < 42) cout << "turururu";
else if(n < 56) cout << "tururururu";
else cout << ("tu+ru*") << (n/14 + 1) ;
}
else {
if(n < 14) cout << "tururu";
else if(n < 28) cout << "turururu";
else if(n < 42) cout << "tururururu";
else cout << ("tu+ru*") << (n/14 + 2) ;
}
return 0;
}
https://www.acmicpc.net/problem/15947
풀 때 어려웠던 점 또는 느낀점 :
어려운 점은 없었다
문제 자체는 간단하다 어떻게 해야
더 코드를 효율적이게 짤 수 있을지가 관건인것 같다.
개선방안 :
#include<cstdio>
char str[14][10]= {
"baby", "sukhwan", "tururu", "turu",
"very", "cute", "tururu", "turu",
"in", "bed", "tururu", "turu",
"baby", "sukhwan"
};
void print_t(int a) {
if (a >= 5) printf("tu+ru*%d", a);
else {
printf("tu");
while (a--) printf("ru");
}
}
int main() {
int N; scanf("%d", &N);
N--;
int time = N / 14;
int g = N % 14;
if (str[g][0] != 't') puts(str[g]);
else if (str[g - 1][0] == 't') {
print_t(1 + time);
}
else print_t(2 + time);
return 0;
}
오호 tururu를 출력하는 함수를 만들고
이차원 배열을 사용해 인덱싱으로 풀었다 확실히 조건문 여러개로 푸는것보단
직관적이고 효율적인것 같다.
이렇게 푸는 방법도 기억해야겠다
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[C++] [백준 10757] 큰 수 A+B (pps 4-2) (0) | 2021.07.17 |
---|---|
[C++] [백준 2953] 나는 요리사다 (pps 4-1) (2) | 2021.07.17 |
[C++] [LeetCode 38] Count and Say (ops 3-8) (1) | 2021.07.16 |
[C++] [LeetCode 860] Lemonade Change (pps 3-7) (0) | 2021.07.16 |
[C++] [백준 17211] 좋은 날 싫은 날 (pps 3-5) (0) | 2021.07.13 |
댓글