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

BOJ 입출력 문제 2

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

안녕쟈기

<11719번 / 그대로 출력하기 2>

이 문제는 11718번과 다르게 100줄이상 입력 경우의 예외 처리를 하지 않으면 출력 초과라는 메세지가 떴다. 그래서 for문의 조건을 100번으로 걸어놓고 11718에서 ""가 입력되면 입력을 멈추게 했는데 그 조건을 없앴다. 그러면 엔터도 입력으로 저장이 가능하였다!

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


int main(void)
{
    string str;
    for(int i=0;i<100;i++)
    {
        getline(cin, str);
        cout << str << endl;
    }
    return 0;
}
cs

 
<11720번 / 숫자의 합>

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

이 문제는 입력을 int형으로 설정하여 받으면 한글자씩 인식하지 못한다. 예를 들어서 10을 입력하면 int형 변수인 경우 10으로 인식한다. 하지만 문제에서는 10을 입력하면 1과 0으로 인식해야한다. 따라서 입력을 char형 변수로 받은 후 그 값을 더해준다. 이 때 char형으로 입력받아서 더하면 아스키코드값으로 결과가 나오기 때문에 이를 바꿔주어야 한다. 0의 아스키코드값이 48이기 때문에 입력받은 char변수에서 48을 빼준다.

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


int main(void)
{
    int t = 0;
    cin >> t;
    char c;
    int total = 0;
    for (int i = 0; i < t; i++)
    {
        cin >> c;
        c -= 48;
        total += c;
    }
    cout << total << endl;
    return 0;
}


<11721번 / 열 개씩 끊어 출력하기>

stirng 문자열의 길이 구하기 -> str.length() / 이 때 str은 string 변수의 이름이다.

strign 문자열 원하는만큼 잘라서 사용하기 -> substr

ex) substr(10) -> 10번째 문자열부터 문자열의 끝까지 반환,

    substr(10,5) -> 10번째 문자열부터 5개의 문자열을 반환

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;
    cin >> str;
    int l = str.length(); 
    l /= 10;
    for (int i = 0; i <= l; i++)
    {
        cout << str.substr(i * 1010<< endl;
    }
    return 0;
}
cs


<2741번 / N 찍기>

이 문제는 간단하게 구현할 수 있었지만 cout에서 endl로 개행을 하는 경우 시간초과로 틀렸다. 이를 해결하기 위해 endl 대신에 '\n'을 사용하여 개행을 했더니 정답이었다. 찾아보니 endl은 단순 개행이 아니라 개행 후 출력 버퍼를 비워주는 역할까지 하기 때문에 단순 개행인 '\n'보다 처리 속도가 느리다고 한다. 앞으로 알고리즘의 성능을 올리고 싶을 땐 endl 말고 '\n'을 사용해야겠다ㅋㅋ

 

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;


int main(void)
{
    int n = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cout << i << '\n';
    }
    return 0;
}
cs


<2742번 / 기찍 N>

이는 2741번에서 for문을 내림차순 형식? 감소하는 형식으로 바꿔주기만 하면 된다~~

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;


int main(void)
{
    int n = 0;
    cin >> n;
    for (int i = n; i > 0; i--)
    {
        cout << i << '\n';
    }
    return 0;
}
cs

 
<2739번 / 구구단>

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;


int main(void)
{
    int n = 0;
    cin >> n;
    for (int i = 1; i <= 9; i++)
    {
        cout << n << " * " << i << " = " << n * i << '\n';
    }
    return 0;
}
cs


<1924번 / 2007년>

이 문제는 2007년의 요일을 구하는 문제이다. 2007년은 1~12월까지 31,28,31,30,31,30,31,31,30,31,30,31일까지 있고, 1월 1일은 월요일이다. 이 가정하에 문제를 풀었다. 우선 요일과 매 달의 마지막 날짜를 각각 string형과 int형 배열에 저장한다. 그리고 입력받은 월까지의 일들을 모두 더하고 현재 달의 날짜까지 모두 더해준 후 7로 나눈 나머지 값을 요일 배열에서 찾으면 된다. 말로하니까 이상한데 코드를 보면 이해가 될 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
    int x, y;
    cin >> x >> y;
    string day[] = { "SUN","MON","TUE","WED","THU","FRI","SAT" };
    int month[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    int total = 0;
    for (int i = 1; i < x; i++)
    {
        total += month[i - 1];
    }
    total += y;
    int result = total % 7;
    cout << day[result] << endl;
    return 0;
}
Colored by Color Scripter
cs

 
<8393번 / 합>

입력받은 숫자의 팩토리얼 값을 구하는 문제이다. 쉽게 할 수 있어유!

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

 
<10818번 / 최소, 최대>

이 문제도 간단하게 풀 수 있었다. 처음에는 입력받은 테스트케이스의 수만큼 int형 배열을 동적할당하여 입력받은 숫자들을 모두 저장하고 그들을 비교해서 최대 최소를 찾으려고 했으나 생각해보니까 굳이 그럴 필요가 없었다. 그래서 그냥 int 변수로 입력받고 입력받는 즉시 min, max 변수와 비교한다. 이 때 min은 1000000으로, max는 -1000000으로 초기화한 후 반복문 내의 조건문에서 최대 최소를 찾아주었다.

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 n = 0;
    cin >> n;
    int max = -1000000;
    int min = 1000000;
    int a = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> a;
        if (max < a)
            max = a;
        if (min > a)
            min = a;
    }
    cout << min << " " << max << endl;
    return 0;
}
cs

 
<2438번 / 별 찍기 - 1>

이 문제 1학년때 처음 c프로그래밍을 접했을 때는 이해도 안가고 너무 어려워서 별문제가 나올때 마다 구글링해서 끙끙거렸던 기억이 있는데 지금은 보자마자 그냥 쉽게 풀 수 있는거보고 조금 놀랐다ㅋㅋㅋ 이게 사망년의 짬바인가...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 즐거워><

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


using namespace std;
int main(void)
{
    int n = 0;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            cout << "*";
        }
        cout << endl;
    }
    return 0;
}
cs


입출력 2번째 스테이지 클리어~~

728x90

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

1차원 배열 - 3052번 / 나머지  (0) 2020.09.01
BOJ 입출력 문제 3  (0) 2020.08.06
BOJ 입출력 문제 1  (0) 2020.08.05
1단계 - 입출력과 사칙연산  (0) 2020.08.01
504 Gateway Time-out  (0) 2020.07.27

댓글