본문 바로가기
Problem Solving

[C++] [백준 15947] 아기 석환 뚜루루 뚜루 (pps 3-9)

by tls1107 2021. 7. 16.
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

 

15947번: 아기 석환 뚜루루 뚜루

첫 번째 줄에 석환이가 N번째로 부를 단어를 출력한다. 여기서 단어란 가사 중 공백으로 구분되는 연속된 알파벳 소문자열을 뜻한다. 단, 출력할 단어가 “tururu...ru”일 때, “ru”가 k(k ≥ 5)번

www.acmicpc.net


풀 때 어려웠던 점 또는 느낀점 :

어려운 점은 없었다

문제 자체는 간단하다 어떻게 해야

더 코드를 효율적이게 짤 수 있을지가 관건인것 같다.


개선방안 :

#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
반응형

댓글