본문 바로가기
코딩테스트/BOJ

BOJ 입출력 문제 1

by 의정부핵꿀밤 2020. 8. 5.
728x90

흐와압

<2558번 / A+B -2>

cin은 space 또는 enter로 구분하기 때문에 1000번과 동일한 코드로 구현하였다.

 

#include <iostream> 
using namespace std;
int main(void)
{
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}

 

<10950번 / A+B -3>

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

 

이걸 해결하기 위해 난 두 가지 방법을 고민하였다. 첫번째는 테스트케이스만큼 반복문을 돌리되, 입력 아래 바로 출력을 하는것과 두번째는 배열 혹은 동적할당을 하여 출력값을 한번에 보이게 하는것이다. 아래는 구현 코드이다. (말투 너무 보고서 재질,,,)

 

1. 단순 반복문

#include <iostream> 
using namespace std;

int main(void)
{
int t, a, b;
cin >> t;
for (int i = 0; i < t; i++)
{
cin >> a >> b;
cout << a + b << endl;
}
return 0;
}

 

2. 배열 선언

a와 b를 배열로 선언하여 배열에 입력받은 수를 모두 저장하고 순서대로 반복문을 통해 연산값을 출력한다.

단점 : 테스트케이스를 배열크기만큼밖에 못쓴다. / 메모리가 낭비된다.

 

#include <iostream> 
using namespace std;

int main(void)
{
int a, b, t, r[100];
cin >> t;
for (int i = 0; i < t; i++)
{
cin >> a >> b;
r[i] = a + b;
}
for (int j = 0; j < t; j++)
{
cout << r[j] << endl;
}
return 0;
}

 

3. 동적할당

다음은 입력받은 테스트케이스만큼 int형 배열을 동적할당하여 결과를 모두 배열에 저장하고 한번에 출력한다. 내 생각엔 이 코드가 가장 적합한것 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>  
using namespace std


int main(void

int a, b, t; 
cin >> t; 
int *result = new int[t]; 
for (int i = 0; i < t; i++

cin >> a >> b; 
result[i] = a + b; 

for (int j = 0; j < t; j++

cout << result[j] << endl

return 0
}
cs

 

<10951번 / A+B -4>

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

이 문제는 테스트케이스가 정해지지 않은 문제이다. 이를 해결하기 위해 무한루프를 작성하면 출력초과라는 에러 메세지가 뜬다. 따라서 이를 만족시키려면 while의 조건문 안에서 조건을 걸어놓고 사용해야한다고 한다.

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int main(void)
{
    int a, b;
    while (cin >> a >> b)
    {
        cout << a + b << endl;
    }
}
cs

 

<10952번 / A+B -5>

위와 동일한 문제이지만 이 때는 입력의 마지막에 0 0이 온다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>


using namespace std;


int main(void)
{
    int a, b;


    while (cin >> a >> b)
    {
        if (a == 0 && b == 0)
            break;
        cout << a + b << endl;
    }
}
cs

 

<10953번 / A+B -6>

이 문제는 두 가지 방법이 있다. 첫째는 문장으로 입력받고  ,기준으로 구분하여 숫자를 구하는것과 두번째는 애초에 ,를 입력받고 숫자를 따로 입력받는 방법!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;


int main(void)
{
    int a, b, t;
    char c;
    cin >> t;
    int *result = new int[t];
    for (int i = 0; i < t; i++)
    {
        cin >> a >> c >> b;
        result[i] = a + b;
    }
    for (int j = 0; j < t; j++)
    {
        cout << result[j] << endl;
    }
    return 0;
}
cs

이번엔 scanf를 통해 애초에 ,를 입력받게 한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;


int main(void)
{
    int a, b, t;
    cin >> t;
    int *result = new int[t];
    for (int i = 0; i < t; i++)
    {
        scanf("%d,%d"&a, &b);
        result[i] = a + b;
    }
    for (int j = 0; j < t; j++)
    {
        cout << result[j] << endl;
    }
    return 0;
}
cs

 

<11021번 / A+B -7>

쉽군 껄껄

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;


int main(void)
{
    int a, b, t;
    cin >> t;
    int *result = new int[t];
    for (int i = 0; i < t; i++)
    {
        cin >> a >> b;
        result[i] = a + b;
    }
    for (int j = 0; j < t; j++)
    {
        cout << "Case #" << j+1 << ": ";
        cout << result[j] << endl;
    }
    return 0;
}
Colored by Color Scripter
cs

 

<11022번 / A+B -8>

배열 동적할당을 두 개하여 입력을 저장하면 된다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;


int main(void)
{
    int a, b, t;
    cin >> t;
    int *aa = new int[t];
    int *bb = new int[t];
    for (int i = 0; i < t; i++)
    {
        cin >> a >> b;
        aa[i] = a;
        bb[i] = b;
    }
    for (int j = 0; j < t; j++)
    {
        cout << "Case #" << j+1 << ": ";
        cout << aa[j] << " + " << bb[j] << " = " << aa[j] + bb[j] << endl;
    }
    return 0;
}
Colored by Color Scripter
cs

 

<11718번 / 그대로 출력하기>

이 문제는 한 줄을 그대로 입력받는 함수인 getline을 통해 구현하였다. 이는 띄어쓰기까지 문자열로 입력받아 저장할 수 있다.

cin.getline(cin, 문자열 변수); -> 개행 문자를 만나면 입력을 중단한다.

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(void)
{
    string str;
    while (1)
    {
        getline(cin, str);
        if (str == "")
            break;
        cout << str << endl;
    }
    return 0;
}
cs

 

728x90

'코딩테스트 > BOJ' 카테고리의 다른 글

BOJ 입출력 문제 3  (0) 2020.08.06
BOJ 입출력 문제 2  (0) 2020.08.05
1단계 - 입출력과 사칙연산  (0) 2020.08.01
504 Gateway Time-out  (0) 2020.07.27
백준 알고리즘 공부 시작!  (0) 2020.07.27

댓글