제가 계속 했었을 때 시간초과가 떴었습니다. 그래서 시간초과가 왜 떴을까? 라는 고민을 하면서 구글링을 해봤는데요

밑에 보시면 답이 나와있습니다.

 

문제

자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

 

 

 

만약 소스를 다 적고 5,4,3,2,1까지 출력이 됐는데 [시간초과]라고 뜨시는 분들은 다음과 같습니다.

첫 번째로 반복문(for, while)등을 사용해서 시간이 오래 걸린다는 점이 있습니다.

두 번째로 입출력 방식에서 여러 개를 받거나 출력할 때 시간초가가 날 수도 있습니다.

세 번째로 [endl]라는 함수를 썼기 때문입니다. 그래서 [\n]로 바꿔줘야 합니다.

 

즉, 이 문제에서 문제점은 [endl]를 쓰는 것이 아니라 ["\n"]을 써야 됩니다.

 

입출력 상황이나 반복적이 많으면(cin/cout)을 사용하시면 cin.tie(NULL), cout.tie(NULL), sync_with_stdio(false)를 적용해주시길 바랍니다.

(제 그 전글을 보시면 입출력이 많은 상황에서 java는 무엇을 써야되고 C++에서는 무엇을 써야되는지 글을 기재해놨습니다.)

 

소스코드 보시겠습니다.

#include <iostream>

using namespace std;

int main()
{
    
    int a;
    cin >> a;

    for(int i=a; i>0; i--)
        cout<<i<<"\n";

}

 

 

이상 포스터를 마치겠습니다. 감사합니다.

바로 문제를 보시겠습니다.

www.acmicpc.net/problem/2741

 

2741번: N 찍기

자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

www.acmicpc.net

문제

알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.

한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다.

출력

입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.

 

11720번 문제와 거의 비슷한데 어느 정도 감이 오지 않나요 ?

 

string 함수를 쓰고 string에서 for문을 돌려 10번째 인 곳에서 "\n"을 하면 됩니다^^,

소스코드를 바로 보시겠습니다.

 

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    string a;

    getline(cin, a);
    for(int i=0; i<a.size(); i++)
    {
        cout<<a[i];
        if((i + 1 )% 10 == 0)
            cout<<"\n";

        
        
    }
    return 0;
}

getline()이 모르신다면 구글에 getline을 쳐서 이해하시길 바랍니다.

 

이상 포스터를마치겠습니다.

입출력은 일부러 안 풀었었는데 원래 단계별로 가는 게 맞는 것 같습니다. 예전에 어려운 문제부터 풀려고하니 흥미가 떨어지면서 하고 싶지가 않았었죠 근데 지금은 뭔가 계단 오르듯이 하니 재밌네요. 잡소리는 그만 하고 바로 문제를 보시겠습니다.

 

www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

 

 

 

배열로 해도 되구 아니면 그냥 해도 되겠네요.

두 개의 소스를 올리도록 하겠습니다.

 

일단 배열부터 보시죠. 배열 부분에서도 딱히 어려운 부분이 없습니다.

저기서 sum += arr[i] - '0' 이 부분이 제일 중요하네요.

#include <iostream>

using namespace std;

int main()
{
    int num1;
    cin >> num1;
    
    char arr[num1];

    cin >> arr;
    int sum = 0;

    for(int i=0; i<num1; i++)
    {
        sum += arr[i] - '0';   
    }

    cout<<sum<<endl;

    return 0;
}

 

다음으로 배열 없는 소스코드를 보시겠습니다.

#include <iostream>

using namespace std;

int main()
{
    int num1;
    cin >> num1;
    
    char num2; 

    int sum = 0;

    for(int i=0; i<num1; i++)
    {
        cin >> num2;
        sum += (num2 - '0');
    }

    cout<<sum<<endl;

    return 0;
}

 

 

이상포스터를 마치겠습니다. 감사합니다.

www.acmicpc.net/problem/11719

 

11719번: 그대로 출력하기 2

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이

www.acmicpc.net

문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

입력

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 있을 수도 있다.

출력

입력받은 그대로 출력한다.

 

 

 

이번에도 getline()을 사용해서 풀어보도록 하겠습니다. 만약 getline()에 대해서 모르신다면 제 그 전 글을 보고 와주시길 바랍니다.

 

그대로 출력하기 1에서 살짝만 수정하면 되는데요 어떤 것을 수정하면 될까요??

만약 30분넘게 고민하시지마시고 해석 풀이를 보면서 이해하시길 바랍니다.

 

바로 소스를 보시죠.

 

#include <iostream>
#include <string>

using namespace std;


int main() 
{
    string a; 
    int i;
    while(i < 100)
    {
        getline(cin, a);

        cout<<a<<endl;
        
        i++;
    }

    return 0;
}

 

만약 while(true)로 한다면 출력초과로 뜨실겁니다. 하지만, 저기 문제에서 100글자를 넘지 않아야 한다고 합니다. 그래서 while을 i < 100으로 줬습니다.

 

이상 포스터를 마치겠습니다.

www.acmicpc.net/problem/11718

 

11718번: 그대로 출력하기

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시�

www.acmicpc.net

문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

입력

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

출력

입력받은 그대로 출력한다.

 

 

소스를 보기 전에 저는 <iostream>에 정의된 cin의 멤버함수인 " getline() (std::cin.getline)을 쓰겠습니다

 즉, getline()은 띄어쓰기 부분까지 문자열을 저장할 수 있습니다.

 

바로 소스코드를 보시죠.

 

#include <iostream>
#include <string>

using namespace std;


int main() 
{
    string a; 

    while(true)
    {
        getline(cin, a);
        if(a == "")
            break;

        cout<<a<<endl;
    }

    return 0;
}

 

 

이상 포스터를 마치겠습니다.

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

 

 

바로 소스코드 보면 될 것 같습니다.  11021번 문제와 되게 비슷합니다.

#include <iostream>

using namespace std;

int main()
{

  
    int T;
    cin >> T;
    int A, B;

    for(int i=1; i<=T; i++)
    {
        cin >> A >>B; 
        cout<<"Case #"<<i<<": "<<A<<" + "<<B<<" = "<<A+B<<endl;

      
      
    } 

    return 0;
}

 

 

딱히 어려운 게 없으니 이것도 넘어가겠습니다.

 

이상 포스터를 마치겠습니다.

바로 문제로 들어가겠습니다.

A+B - 7 

www.acmicpc.net/problem/11021

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.

 

예제 입력 1

5

1 1

2 3

3 4

9 8

5 2

예제 출력 1

Case #1: 2

Case #2: 5

Case #3: 7

Case #4: 17

Case #5: 7

 

 

 

C++ 문제풀이

#include <iostream>

using namespace std;

int main()
{
    int T;
    int  A, B;
    cin >> T;
    for(int i=1; i<=T; i++)
    {
        cin >> A >>B;
        cout<<"Case #"<<i<<": "<<A+B<<endl;

    }
}

 

 

따로 설명드릴 게 없다고 생각합니다.

i = 1번째부터 시작하니깐 1 이고  i++후위 연산자를 위해 2로 증가하고 그 다음 3으로 증가하고 이렇게 쭈쭉가서 5까지 나옵니다.

 

이상 포스터를 마치겠습니다.

달팽이는 올라가고 싶다 문제를 한 번 풀어보도록 하겠습니다.

 

 

1. 높이가 V 

2. 낮에 A미터 올라갈 수 있다.

3. 밤에 잠을 자는 동안 B미터 미끄러진다. 정상에 올라간 후에는 미끄러지 지 않음(V- B)

4. 나무 막대를 모두 올라가면 , 며칠이 걸리는지?

 

 

딱히 설명드릴 게 없습니다.. 바로 소스코드 보시죠 

 

#include <iostream>

using namespace std;


int main()
{
	int A, B, V; 
	cin >> A >> B >> V; // A =2 B =  1 V = 5 

	int sum = (V - B - 1) / (A - B) + 1; 
			// (5 - 1  -1 ) = 3 /(2-1) + 1;
            // -> 3 /1 + 1 -> 3+1 -> 4 

	cout << sum << endl; //4 

	return 0;


}

 

이상포스터를 마치겠습니다. 

+ Recent posts