백준 2739번 문제풀이




1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
 
using namespace std;
 
int main()
{
    int N;
 
    cin >> N;
    for (int i = 1; i < 10; i++)
    {
        cout << N << " * " << i << " = " << N * i << "\n";
    }
}
cs


백준 2742번 문제풀이




1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
 
using namespace std;
 
int main()
{
    int num;
    cin >> num;
 
    for (int i = num; i > 0; i--)
    {
        cout << i << '\n';
    }
}
cs


백준 2741번 문제풀이





1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
 
using namespace std;
 
int main()
{
    int num;
    cin >> num;
 
    for (int i = 0; i < num; i++)
    {
        cout << i + 1 << '\n';
    }
}
cs



\n대신 endl을 쓰니 시간초과가 나네요

endl은 속도가 상당히 느린 편이니 되도록 \n을 사용해야겠습니다.


백준 11721번 문제풀이



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
 
using namespace std;
 
int main()
{
    char input;
    int count = 0;
 
    while (1)
    {
        cin.get(input);
        count++;
        cout << input;
        if (count == 10)
        {
            cout << endl;
            count = 0;
        }
        if (input == '\n')
        {
            break;
        }
    }
}
cs



백준 11720번 문제풀이



처음에, 자릿수마다 더하면 되겠다 라고 생각하여

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
 
using namespace std;
 
int main()
{
    int N;
    int input;
    int sum = 0;
    int divide=1;
 
    cin >> N;
    cin >> input;
 
    for (int i = 0; i < N-1; i++)
    {
        divide *= 10;
    }
 
    for (int i = 0; i <N; i++)
    {
        sum += (input / divide);
        input = input % divide;
        divide = divide/10;
    }
 
    cout << sum << endl;
}
cs


이렇게 코딩을 진행하였으나, 생각해보니 intput값은 int형으로 정의했고

int형은 -2^(비트수-1) ~ 2^(비트수-1) 사이의 값만 가질 수 있다는 것을 간과했습니다.


2147483647이상의 수가 들어오면 제대로된 연산이 불가능합니다. 그래서 다른 방법을 써야겠다고 생각했습니다.


그 방법은 생각이 나질 않아서

다른 분들이 하신 풀이를 보고 했습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
 
using namespace std;
 
int main()
{
    int N;
    int sum = 0;
    char input;
 
    cin >> N;
 
    for (int i = 0; i < N; i++)
    {
        cin >> input;
        sum += (input - 48);
    }
 
    cout << sum;
}
cs


정답 코드입니다.


숫자를 하나씩 받기위해서 char형을 사용해주었습니다.

아스키코드 표를 보면 0은 48입니다.

char형으로 숫자를 받아왔기 때문에, 저희가 사용하는 숫자로 나타내려면 -48(-'0')을 해주어야 합니다.


11718번



이 문항에서는 string클래스를 이용하면 쉽게 풀 수 있습니다.

첫번째로, string으로 a를 선언하여, 입력할 문자를 받을 수 있게 합니다.


getline함수는 입력 스트림에서 문자들을 읽어서, 인자로 받은 문자열에 저장합니다.

입력 스트림에서 문자를 읽다가 개행 문자("\n") [<- 수정할 수 있지만 디폴트가 개행 문자입니다.]

를 만나면 해당 문자를 버리고, 읽어들이기를 종료합니다.


추가적으로, 문제 조건에 최대 100개의 입력이 주어진다고 되어 있으므로 무한루프로 돌지 않도록 100번 돌 수 있게 

반복문으로 제한을 걸어주었습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<string>
 
using namespace std;
 
int main()
{
    string a;
 
    for (int i = 0; i < 100; i++)
    {
        getline(cin, a);
        cout << a;
        cout << endl;
    }
}
cs



#11719번


11718번과 동일한 코드로 같은 동작을 할 수 있습니다 :)

+ Recent posts